我正在使用定期從工作線程發出事件的外部組件。在我的事件處理程序中,我使用Dispatcher來調用主線程上的某個方法。這很好地工作......當工作線程嘗試調用主線程上的某些東西時發生死鎖
private void HandleXYZ(object sender, EventArgs e)
{
...
if(OnTrigger != null)
dispatcher.Invoke(OnTrigger, new TimeSpan(0, 0, 1), e);
}
然而,當程序關閉和外部組件的Dispose()S,節目有時掛起(也只能看到在任務管理器殺死)。
當我看看發生了什麼時,它看起來像「組件」正在等待事件在主線程上返回(它停留在Dispose()方法中),而工作線程等待調度程序調用上述對主線程的調用(它掛在調度程序調用行中)。
現在我通過給Invoke添加一個超時來解決shutdown問題,這似乎工作但感覺不對。 有沒有更乾淨的方法來做這樣的事情?我可以強制主線程在關閉之前花費一些時間從其他線程處理任務嗎?
我曾經試圖「斷開」關停前的事件,但沒有幫助,因爲調度程序(可能是)已經在等待,當程序開始關閉...
PS:外部組件意味着我無法訪問源代碼...
請使用段落下一次 – Shai 2012-07-19 09:38:47
粘貼代碼將有很大的幫助 – Vedran 2012-07-19 09:40:58