async/await 致WPF卡死問題
問題代碼:
xmal:一個按鈕+一個顯示框

1 <Button Width="100" Height="50" Margin="10" Click="Button_Click">test</Button> 2 <TextBox x:Name="display" Width="300" Height="300"></TextBox>
cs:點擊按鈕,顯示結(jié)果
async Task<int> getResult() { await Task.Delay(1000); return 10; } private void Button_Click(object sender, RoutedEventArgs e) { display.Text = "Starting to get Result..........\n"; var t= getResult().Result; display.AppendText($"The result is:{t}\n"); }
Button_Click事件處理中獲取異步方法getResult的結(jié)果, getResult只是簡單等待1s后返回結(jié)果,卻并沒有如預(yù)期返回。
分析:
getResult中遇到await后,主線程返回等待結(jié)果,await處異步線程執(zhí)行完之后,后面的任務(wù)仍交由主線程去處理(返回結(jié)果),而主線程在等待結(jié)果,造成死循環(huán)。
解決辦法:
- 主線程異步等待結(jié)果(click事件也要改寫成async)
var t=await getResult();
-
await任務(wù)執(zhí)行完之后仍交于當(dāng)前線程處理后續(xù)步驟(返回結(jié)果)
await Task.Delay(1000).ConfigureAwait(false)
作者:robot2017
出處:http://www.rzrgm.cn/stephen2023/p/17725159.html
版權(quán):本文版權(quán)歸作者和博客園共有
轉(zhuǎn)載:歡迎轉(zhuǎn)載,但未經(jīng)作者同意,必須保留此段聲明;必須在文章中給出原文連接;否則必究法律責(zé)任
出處:http://www.rzrgm.cn/stephen2023/p/17725159.html
版權(quán):本文版權(quán)歸作者和博客園共有
轉(zhuǎn)載:歡迎轉(zhuǎn)載,但未經(jīng)作者同意,必須保留此段聲明;必須在文章中給出原文連接;否則必究法律責(zé)任
浙公網(wǎng)安備 33010602011771號