2010-08-31 192 views
1

當前一個事件處理程序的調用沒有完成時,SqlDependency(例如)是否觸發了OnChange事件? (假設OnDependencyChange方法非常耗時) 究竟發生了什麼?當事件處理程序沒有完成時事件是否被觸發?

SqlDependency dependency=new SqlDependency(command); 


// Subscribe to the SqlDependency event. 
dependency.OnChange += new 
OnChangeEventHandler(OnDependencyChange); 

回答

2

我並不熟悉SqlDependency類,但每MSDN documenation:

可在 生成OnChange事件從線程 發起命令執行不同的線程。

這似乎打開了兩個事件處理程序可以同時運行的可能性。沒有任何文檔指出,在事件再次升級之前,所有事件處理程序都必須完成。要做的安全事情是假設可能發生多個同時發生的事件調用。由於事件是在未定義的線程中引發的,因此無論如何您都必須防範併發性問題。

+0

謝謝,所以我將不得不準備一些不確定的行爲:) – nan 2010-09-03 13:14:32

0

在正常的單線程程序中,它不會。請嘗試以下操作:

添加Windows窗體應用程序。向表單添加一個按鈕。使用下面的方法來處理按鈕的單擊事件:

private void Buttonclick(object sender, EventArgs e) 
{ 
    Thread.Sleep(25);//SUSPEND CURRENT THREAD 
} 

您將無法點擊按鈕,直到調用Thread.Sleep(25)完成其工作(暫停25秒線程)。你也可以在控制檯應用程序中測試它。

相關問題