gpt4 book ai didi

c# - 在 C# 中究竟什么时候执行事件?

转载 作者:可可西里 更新时间:2023-11-01 08:34:05 24 4
gpt4 key购买 nike

我开发了一个大量使用事件的 C# 应用程序。现在这个应用程序偶尔会做一些我无法理解的有趣事情,也无法追查到它们发生的具体原因。我认为这些间歇性故障的原因是某种我没有预料到的并发或竞争条件。

在 C# 中究竟是如何处理事件的?如果引发事件,是否会 (a) 附加到该事件的代码部分立即执行?还是将事件 (b) 放在事件堆栈中,并在 .NET 认为适合执行时执行,同时执行其他代码?

最佳答案

If an event is raised, will the portion of code attached to that event be executed immediately?

好吧,是的,不是。事件是多播委托(delegate),因此可能有零个、一个或多个“代码部分”附加到一个事件。在有很多的情况下,显然其中一个必须先行,其中一个必须后行。第二个不会在事件引发后立即执行;它在第一个事件处理程序正常完成后立即执行。

will the event be put on a stack of events and be executed whenever .NET deems it suitable for execution while other code is executed in the meantime?

假设您的应用程序写得很糟糕并且挂起了 UI。当 UI 挂起时,用户单击按钮 1 和按钮 2。由于应用程序挂起,因此没有任何可见的事情发生。单击按钮 1 和按钮 2 的事件不会触发。但是 Windows 已经创建了一个消息队列并在其上排队,因为按钮 1 和按钮 2 有待处理的点击,当应用程序自行取消挂起时需要处理这些点击。当消息循环被触发时,按钮 1 的点击事件就会触发。当它完成它的工作时,消息循环再次启动,按钮 2 的点击事件被触发。

所以是的,从这个意义上说,事件被排队并稍后执行,但这不是“.NET 认为合适的时候”;这是正在处理消息队列的线程再次开始处理消息队列的时候。这里没有神秘的 Windows 策略控制您的代码。

关于c# - 在 C# 中究竟什么时候执行事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6045035/

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