這是我的問題,我有一個有拋出事件的對象的類,在這個事件中,我從我的類拋出一個自定義事件。但不幸的是原始對象從另一個線程拋出事件,所以我的事件也拋出另一個線程。當我的自定義事件嘗試從控件訪問時,這會導致異常。從原始線程調用事件?
下面是一個代碼示例,以更好地理解:
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我得到一個跨線程異常導致它被稱爲另一個線。
我想要做的就是將我的自定義事件放在原始類線程上,因此可以在其中使用控件。
任何人都可以幫到我嗎?
調用是一個可以從控制調用,這裏是我想要做的是直接拋出原來的線程(從我的課)對我的事件方法。所以在我的Windows窗體中,我不必關心invoke。我可以直接執行諸如「progressbar.value = arg.progress; – Karnalta 2010-04-08 13:02:29
」在這種情況下,當您調用事件(未在您的代碼段中指定)時,您檢查是否需要調用,並調用parse爲Invoke方法的委託中的事件 – 2010-04-08 13:04:08
我不確定要理解,你說的是我的事件還是originalObject事件? – Karnalta 2010-04-08 13:07:04