【发布时间】:2010-04-08 12:54:45
【问题描述】:
这是我的问题,我有一个类,它有一个抛出事件的对象,在这个事件中,我从我的类中抛出一个自定义事件。但不幸的是,原始对象从另一个线程抛出事件,所以我的事件也被抛出另一个线程。当我的自定义事件尝试从控件访问时,这会导致异常。
这是一个代码示例,可以更好地理解:
class MyClass
{
// Original object
private OriginalObject myObject;
// My event
public delegate void StatsUpdatedDelegate(object sender, StatsArgs args);
public event StatsUpdatedDelegate StatsUpdated;
public MyClass()
{
// Original object event
myObject.DoSomeWork();
myObject.AnEvent += new EventHandler(myObject_AnEvent);
}
// This event is called on another thread while myObject is doing his work
private void myObject_AnEvent(object sender, EventArgs e)
{
// Throw my custom event here
StatsArgs args = new StatsArgs(..........);
StatsUpdated(this, args);
}
}
因此,当我在 Windows 窗体上调用时,尝试从事件 StatsUpdated 更新控件时,我得到一个跨线程异常,因为它已在另一个线程上调用。
我想要做的是在原始类线程上抛出我的自定义事件,以便可以在其中使用控制。
谁能帮帮我?
【问题讨论】:
标签: c# events multithreading