gpt4 book ai didi

c# - 有关事件和线程安全的更多信息

转载 作者:太空宇宙 更新时间:2023-11-03 14:19:48 25 4
gpt4 key购买 nike

我在 StackOverflow 上发现了这篇关于赛事和比赛的帖子,这对我帮助很大 -

C# Events and Thread Safety

这里的关键声明是“即使在取消订阅事件后,事件处理程序也需要在被调用时保持健壮”

我认为这意味着当您订阅一个事件时,您必须准备好即使在您取消订阅之后该事件也会被引发,并进行某种检查以查看是否应该处理该事件。

这可能像这样简单(而且丑陋)

bool _acceptEvents;

// event handler
void LoggedIn(object sender, EventArgs a)
{
if (!_acceptEvents) return;

Evt("Now logged in");
}

// code to unsubscribe to event
_acceptEvents = false;
_parent.LoggedIn -= new LoggedInEventHandler(LoggedIn);

现在显然上面的代码看起来很糟糕,但它满足了所需的目的。

我的问题是,这样做更优雅的方法是什么?处理这种情况的典型方法是什么?

我以为你可以做

if (!_parent.LoggedIn.Contains(myhandler)) return;

但我试过了,我猜事件的设计方式是为了防止您看到其他订阅者。

你怎么看?

谢谢

最佳答案

恕我直言,这是一个不存在的问题。您是否遇到过因为在取消订阅后调用事件而产生错误(或将产生错误)的代码?

关于c# - 有关事件和线程安全的更多信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5695538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com