事件处理程序是否保证在 UI 线程上运行

Fro*_*art 1 c# winforms

事件句柄是这样的吗

notifyIcon.BalloonTipClosed += new EventHandler(delegate(Object sender, EventArgs e)
{
     // ...
});
Run Code Online (Sandbox Code Playgroud)

保证在 UI 线程上运行,所以我不需要调用 InvokeBeginInvoke方法来更新控件?

提前致谢。

Guf*_*ffa 5

对,他们是。

用户界面事件是由消息队列中的消息引起的,它是运行消息泵的 UI 线程来处理消息。

从事件System.Timers.Timer不会在UI线程中运行,因为它不是一个UI相关的事件。从一个事件System.Windows.Forms.Timer将在UI线程中运行,因为它的目的是在窗口中运行,并使用该事件的消息队列。

  • 赞成 UI 相关事件处理程序和不相关事件处理程序之间的明确区别。我也将其添加到我的答案中。谢谢 (2认同)