2017-06-04 46 views
1

我已經覆蓋了OnUnhandledException在我的引導程序,但在以下情況下它不叫:Caliburn.Micro的OnUnhandledException不叫

public class Foo : IHandle<Bar> { 
    public void Handle(Bar message) { 
     // Do something that requires UI thread 
    } 

    public void DoSomething() { 
     eventAggregator.PublishOnBackgroundThread(new Bar()); 
    } 
} 

當手柄方法被調用它會拋出InvalidOperationException: The calling thread must be STA, because many UI components require this.,因爲它是在執行後臺線程,而不是在UI線程上:

在我的引導程序中,該例外從未被OnUnhandledException捕獲。 Application.DispatcherUnhandledException事件處理程序也不會捕獲它。

我該如何製作一個通用的異常處理程序,它也會捕獲這些類型的異常,而無需在任何地方實現try/catch?

回答

0

根據Caliburn.Micro GitHub看來,這是一個已知的問題,並且他們正在積極解決問題。你可能希望參加那裏的談話,看看目前是否有任何的解決方案。

0

看起來像這是background threads and WPF沒有使它成爲事件處理程序的問題。

鏈接的問題有一個解決方案,但它可能是我們(Caliburn.Micro)可以幫助的。

+0

不幸的是'AppDomain.CurrentDomain.UnhandledException'在本例中沒有被調用。我會非常感興趣的是看到你(Caliburn.Micro)可以提供哪些幫助,儘管:) – GTHvidsten

+0

很可能它會試圖將所有各種異常處理程序彙集到一個地方。但是,如果這個異常正在被線程池所吞噬,那麼在這裏就不會有幫助。 –