我有以下幾種方法:C#等待對話框主線程返回
public override bool SyncNavigationMethod()
{
AsyncShowDialog().Wait();
return true;
}
public Task AsyncShowDialog()
{
//code to show dialog and process user input from the dialog.
}
什麼情況是,應用進入一個僵局時SyncNavigationMethod被調用。
我的猜測是它運行在等待AsyncShowDialog完成的MainThread上,並且顯示的對話框無法調用它的回調,因爲它是調用它的MainThread。因此,主線程等待自己,這是一個僵局。
的更多信息:
- 運行 - UWP。
- 設備:手機(如上所述)桌面(應用程序在顯示對話框之前凍結)。
- 我試過在AsyncShowDialog上使用.Wait()\ .Result。
- 我試圖在調用AsyncShowDialog以在AsyncShowDialog運行時阻止進度代碼之後使用ManualResetEvent。
我是否懷疑deadLock?
如何在沒有此死鎖的情況下從SyncNavigationMethod調用AsyncShowDialog?
感謝。
對於UI線程,你需要'Task.WhenAll'或'Await','Task.Wait/Task。WaitAll'將導致死鎖 –