我試圖在(相當簡單的)應用程序中實現異步等待的東西。 我的目標是在等待之間更新busyIndicator。在2個等待句子之間更新UI
我不知道是什麼,但我認爲我錯過了一些基本的理解異步等待的東西。
private async void StartTest(object obj)
{
try
{
this.IsBusy = true;
this.BusyMessage = "Init..."
await Task.Delay(7000);
var getData1Task = this.blHandler.GetData1Async();
this.BusyMessage = "Retreiving data...";
this.result1 = await getDeviceInfoTask;
this.result2 = await this.blHandler.GetData2Async();
this.BusyMessage = "Searching...";
this.result3 = await this.blHandler.GetData3();
}
finally
{
this.IsBusy = false;
this.BusyMessage = string.empty;
}
}
的BusyIndicator控件具有IsBusy
和BusyMessage
的結合。 執行此代碼時,我得到呈現「初始化...」的BusyIndicator控件,但它永遠不會改變爲「Retreiving數據...」或「搜索...」。 更糟:在執行最後的GetData3
時,ui完全凍結。
這些方法是做什麼的?他們真的是異步的嗎? – SLaks
在調試器凍結時暫停並查看堆棧跟蹤。 – SLaks
這段代碼是在事件處理程序中調用的嗎?該處理程序是否標記爲異步? – Baldrick