2009-08-24 226 views
5

我有一個關於C#事件處理的問題。我聽A級的事件拋出。現在,當事件被拋出時,執行的方法會執行某些操作。這種方法有時需要等待數據源或類似的響應。線程事件處理(C#)

我認爲事件處理是同步的,所以一個接一個的事件將被處理。是否有可能使這種異步?我的意思是,當方法執行但必須等待數據源的響應時,可以處理另一個事件?

在此先感謝

塞巴斯蒂安

回答

11

我認爲你可以產卵,需要在一個新的線程等待的代碼。這會導致事件處理程序不會阻塞引發事件的線程,以便它可以在行中調用下一個事件處理程序。 (C#3.5樣本)

private void MyPotentiallyLongRunningEventHandler(object sender, SomeEventArgs e) 
{ 
    ThreadPool.QueueUserWorkItem((state) => { 
     // do something that potentially takes time 

     // do something to update state somewhere with the new data 
    }); 
} 
+0

如果參數(SomeEventArgs)包含任何輸出參數會怎麼樣?該方法不能離開,直到計算輸出參數...我在這裏發佈了一個相關的問題:http://stackoverflow.com/questions/6453655/parallel-event-handling-in-c/6453701#6453701 – 2011-06-27 11:08:30

2

簡單,在你的事件處理程序創建一個線程,並完成所有的邏輯在那裏。最好使用線程池,因此線程數量是有限的。

+0

創建一個線程並不便宜,因此對於事件處理程序來說可能不是一個好主意,但是您可以像說的那樣使用線程池。 – 2009-08-24 09:50:29

+0

我不認爲線程池總是有預先創建的線程,我認爲它會首先創建它們幾次,所以無論如何您都要支付這筆費用。 – vava 2009-08-24 14:02:00