2010-02-22 48 views
1

我在寫一篇Prism應用程序中的複合事件處理程序時遇到了一個奇怪的結果。我創建了事件處理程序,並放在一個例外聲明,以驗證處理程序被稱爲:棱鏡:異常處理?

public void OnDateSelected(DateTime selectedDate) 
{ 
    // Temporary code 
    throw new ApplicationException("Not implemented yet."); 
} 

我運行應用程序,並引發事件。事件處理程序被調用,但異常不會停止執行。它被寫入輸出窗口,應用程序退出處理程序,但執行繼續。在任何地方都沒有try-catch塊,爲什麼中斷執行不會異常呢?謝謝。

回答

5

我們在這裏發現了問題。我們正在使用棱鏡庫的v2.2。在BackgroundEventSubscription類中,當發佈事件時,將創建並調用後臺工作器。永遠不會處理RunWorkerCompleted委託,因此從不會在任何地方拾取例外。棱鏡庫也沒有給最終用戶一個簡單的方法來在這個版本中應用他們自己的委託。解決方案是編譯自己的一組庫並使用線程池(這是我們所做的)或者覆蓋您自己的CompositePresentationEvent類的Subscribe,並使用您自己的事件訂閱類來完成您所需要的。

棱柱v4庫已經解決了這個問題,因爲它使用線程池,所以任何未處理的異常都會冒泡到域未處理的異常處理程序(如果指定了一個)。

謝謝。