async Task LoadData()
메서드를 사용하는 DialogViewModel
클래스가 있습니다. 이 메서드는 데이터를 비동기 적으로로드하고 사용자에게로드를 알리는이 대화 상자를 표시합니다. 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
}
,이 처리되지 않은 : 여기에 코드입니다. await
을 호출 할 때 예외가 처리되고 WindowManager.ShowDialog(dialog)
이 완료 될 때까지 발생하지 않기 때문에 발생합니다.
비동기 로딩 대화 상자를 표시하는 올바른 방법은 무엇입니까? OnShow()
, 생성자 또는 유사한에서
- 전화
LoadData()
:이 방법을 시도했습니다. 그러나이 대화 상자를 데이터없이 표시해야하는 경우에는 작동하지 않습니다. - 대화 상자를 표시하기 전에
await LoadData()
으로 전화하십시오. 이렇게하면 사용자는 실제로 창을보기 전에 데이터가로드 될 때까지 기다려야하지만 창을로드 표시기로 즉시 표시하려고합니다.
http://stackoverflow.com/questions/13239306/how-to-continue-executing-code-after-calling-showdialog –
불행히도이 질문의 대답은 저에게 적합하지 않습니다. 나는'Show()'에 대해 이미 썼다. 호출자 만 데이터를로드할지 여부를 결정하기 때문에 외부에서 'LoadData()'를 호출해야합니다. 'BackgroundWorker'에 대해서는 async-await를 사용하여이 작업을 수행 할 수있는 방법이 있기를 희망합니다 ... – STiLeTT
'WindowManager.ShowDialog()'는 어디에서 왔습니까? Caliburn Micro입니까? – svick