gpt4 book ai didi

.net - 异步和 .NET 事件?

转载 作者:行者123 更新时间:2023-12-04 18:54:08 24 4
gpt4 key购买 nike

问这样一个微不足道的问题我真的很尴尬,但现在调试一些软件让我确信我并不真正理解这个问题:

从 20,000 英尺的高度看 .NET 事件如何工作?我不是指委托(delegate)/事件处理程序模式和所有这些。我的意思是 - 大局是什么:

  • 代码 A 正在做某事。
  • 发生了一些外部触发。例如,假设用户单击了某个控件。
  • 奇迹发生了并调用事件的事件处理程序。
  • 另一个奇迹发生了事件处理程序返回后。

  • 现在,魔法是什么?这与线程有什么关系?事件发生时运行我的代码的线程是否中断,然后在事件处理程序返回后恢复?但我用谷歌搜索了 found out .NET 处理程序在原始线程中被同步调用。那么谁负责停止和恢复代码 A 呢?如果事件是嵌套的(即事件 2 在事件 1 的事件处理程序运行时发生)会发生什么?

    编辑 :据我了解,答案说下一个事件的事件处理程序将仅在当前运行的事件处理程序完成后运行。这意味着您的代码不会被中断:第 n 行总是会在第 n-1 行之后和第 n+1 行之前立即运行。然而,就在我发布问题之前,我正在调试一个通过自动化控制 Internet Explorer 的程序(使用 Webius 的 SWExplorerAutomation)。我很确定,当我逐行浏览代码时,我被“绑架”:-) 到某个事件处理程序,并在该事件处理程序完成其业务后返回到代码中的中断位置。这意味着要么不理解答案,要么程序在通过调试器时表现不同!

    最佳答案

    让我对你的问题有所了解。神奇的是windows消息循环。您在示例中看到,实际上,当事件发生时,代码 A 不会停止。相反,这是顺序。

    当代码 A 运行时,用户单击一个按钮。按钮的窗口消息排队,但没有任何 react 。当代码 A 退出其功能或将控制权交还给消息循环时,将处理 Click 事件并运行事件处理程序。

    试试这个实验。在主线程的程序中放置一个无限循环,然后单击用户界面。您会注意到用户界面将无响应,并且不会运行任何事件处理程序。

    关于.net - 异步和 .NET 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1623748/

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