【发布时间】:2010-09-06 13:07:03
【问题描述】:
我发现 .NET 事件模型是这样的,我经常会在一个线程上引发一个事件并在另一个线程上监听它。我想知道将事件从后台线程编组到我的 UI 线程的最干净的方法是什么。
根据社区的建议,我使用了这个:
// earlier in the code
mCoolObject.CoolEvent+=
new CoolObjectEventHandler(mCoolObject_CoolEvent);
// then
private void mCoolObject_CoolEvent(object sender, CoolObjectEventArgs args)
{
if (InvokeRequired)
{
CoolObjectEventHandler cb =
new CoolObjectEventHandler(
mCoolObject_CoolEvent);
Invoke(cb, new object[] { sender, args });
return;
}
// do the dirty work of my method here
}
【问题讨论】:
-
请记住,当现有托管控件还没有非托管句柄时,InvokeRequired 可能会返回 false。在完全创建控制之前,您应该谨慎处理将引发的事件。
标签: c# multithreading events