【发布时间】:2009-10-26 08:57:33
【问题描述】:
我真的很不好意思问这样一个微不足道的问题,但现在调试一些软件让我确信我并不真正理解这个问题:
从 20,000 英尺的高度看 .NET 事件如何工作?我不是指委托/事件处理程序模式和所有这些。我的意思是 - 大局是什么:
- 代码 A 正在做某事。
- 发生了一些外部触发。例如,假设用户点击了某个控件。
- 奇迹发生了,事件的事件处理程序被调用。
- 另一个魔法发生在事件处理程序返回后。
现在,魔法是什么?这与线程有什么关系?事件发生时运行我的代码的线程是否中断,然后在事件处理程序返回后恢复?但我用谷歌搜索并found out 发现.NET 处理程序在原始线程中被同步调用。那么谁负责停止和恢复代码 A 呢?如果事件嵌套会发生什么(即事件 2 在事件 1 的事件处理程序运行时发生)?
编辑:据我了解,答案是 next 事件的事件处理程序将仅在当前运行的事件处理程序完成后运行。这意味着您的代码不会被中断:第 n 行总是会在第 n-1 行之后和第 n+1 行之前立即运行。然而,就在我发布问题之前,我正在调试一个程序,通过自动化控制 Internet Explorer(使用 Webius 的 SWExplorerAutomation)。我很确定,当我逐行浏览代码时,我被“绑架”:-) 到某个事件处理程序,并在该事件处理程序完成其业务后返回到代码中的中断位置。这意味着要么不理解答案,要么程序在单步执行调试器时表现不同!
【问题讨论】:
标签: .net multithreading asynchronous event-handling