我在.NET 4.0應用程序中使用Modern UI for WPF模板,其中一個頁面在導航回到另一個頁面之前需要執行異步命令。同時,在命令運行時,UI線程必須解鎖。如果我這樣做:在導航前執行異步命令
public void OnNavigatingFrom(FirstFloor.ModernUI.Windows.Navigation.NavigatingCancelEventArgs e)
{
TaskEx.Run(() =>
{
//Replace Sleep call by the async command execution
System.Threading.Thread.Sleep(5000);
}).Wait();}
OnNavigatingFrom在導航回前等待,但在此期間UI被阻止。
關於如何在不同的上下文中執行異步代碼並使OnNavigatingFrom「同步」運行的任何想法?
編輯:有一個similar thread解決方法,沒有確鑿的答案。
你確實意識到等待是一個阻止呼叫? –
我這樣做,我知道這是一個問題。那麼考慮到調用方法(OnNavigatingFrom)在操作完成之前無法返回,我怎麼才能使它不被阻塞呢? –
如果*(且僅當)* OnNavigatingFrom方法是一個事件處理程序,則可以將其設置爲「public async void」(感謝Stephen Cleary閱讀大量文獻)。這將允許你使用'await'。例如。 '等待DoSomethingAsync();'。調用方法將不會返回,直到等待完成的任務完成 –