由於捕獲異常而顯示消息對話框的正確方法是什麼?由於捕獲的異常而顯示WinRT MessageDialog的正確方法是什麼?
我最初試圖
try
{
await DoSomething();
}
catch(InvalidOperation ex)
{
await MessageDialog(ex.Message).ShowAsync();
}
catch(CommunicationException)
{
await MessageDialog(StringResourceLoader.LoginError).ShowAsync();
}
這並沒有工作,因爲你不能await
try塊內。編譯器顯示以下警告:
由於未調用此調用,因此在調用完成之前繼續執行當前方法。考慮應用「等待」運營商的呼叫
我不喜歡保持這些警告在我的代碼的結果,因爲在幾個景點的人已經忘記了使用await
因此具有難以發現漏洞。
更改消息對話框語句var task = new MessageDialog(ex.Message).ShowAsync().AsTask();
擺脫所有的警告和錯誤的,但我不知道那是去了解它的好方法(和技術上是壞它要我await
調用同樣的原因)
最後,我想存儲異常,並做我的東西顯示給用戶邏輯(包括所有邏輯上確定被拋出異常的類型)漁獲量之外,通過:
Exception thrownException = null;
try
{
await DoSomething();
}
catch(Exception ex)
{
thrownException = ex;
}
if (thrownException is InvalidOperationException)
await MessageDialog(ex.Message).ShowAsync();
else if (thrownException is CommunicationException)
await MessageDialog(StringResourceLoader.LoginError).ShowAsync();
我我不確定我是否覺得這是最好的方法。任何想法如何做到這一點?
這裏有多個問題,當你的應用程序已經顯示一個時,MessageDialog也會變得非常暴躁。換句話說,你永遠不能確定用戶會真正看到它。最有可能的結果是一個無法察覺的原因炸到桌面的應用程序。 真正解決這個問題需要一個接一個顯示消息的隊列。或者換句話說,在消息對話框中顯示異常並不是一個好主意。 –
這是一個好點,並有一個有趣的想法有一個隊列... – KallDrexx
請務必檢查類似的問題[這裏](http://stackoverflow.com/questions/14488587/how-to-allow-for-multiple -popups-AT-一次在WinRT中)。 –