我有DialogViewModel
類與async Task LoadData()
方法。此方法異步加載數據並顯示此對話框,通知用戶有關加載。下面是代碼:在異步加載對話框視圖模型中捕獲異常
try
{
var dialog = new DialogViewModel();
var loadTask = dialog.LoadData();
WindowManager.ShowDialog(dialog);
await loadTask;
}
catch (Exception ex)
{
Logger.Error("Error in DialogViewModel", ex);
// Notify user about the error
}
當LoadData
拋出一個異常,它不被處理,直到用戶退出對話框。發生這種情況是因爲在調用await
時處理異常,直到WindowManager.ShowDialog(dialog)
完成纔會發生異常。
顯示異步加載對話框的正確方法是什麼?我試過這種方式:
- 致電
LoadData()
在OnShow()
,構造函數或類似的。但是如果我需要在沒有任何數據的情況下顯示這個對話框,這將不起作用。 - 在顯示對話框之前調用
await LoadData()
。這樣用戶不得不等待數據加載才能真正看到窗口,但我希望窗口立即顯示加載指示符。
http://stackoverflow.com/questions/13239306/how-to-continue-executing-code-after-calling-showdialog – 2014-10-30 15:09:43
不幸的是,這個問題的答案不適合我。我已經寫過關於'Show()'的內容。我想需要從外部調用'LoadData()',因爲只有調用者決定是否加載數據。 至於'BackgroundWorker' - 我希望有一種方法可以做到這一點與異步等待... – STiLeTT 2014-10-30 15:38:11
'WindowManager.ShowDialog()'從哪裏來?它是Caliburn Micro嗎? – svick 2014-10-31 15:36:26