我在我的應用程序中顯示了一個頁面,並且我想執行可能長時間運行的後臺操作。在這一行動正在進行的同時,應該提出另一種觀點,一旦完成,該地區應該回到其以前的觀點。在出現任何問題的情況下,導航應該轉到其他視圖。從後臺導航操作
爲了說明這一點,假設我有一些類,並在它的構造函數中設置一個ICommand:
SomeAction = new DelegateCommand(() =>
{
_regionManager.RequestNavigate("MyTarget", nameof(SomeProgressPage));
Task.Run(() =>
{
DoSomeWork();
});
});
任務本身來講有一些潛在的長期運行;一旦完成,它應該導航到一個條件目的地。
private void SomeWork()
{
try
{
// Do Work
// ...
// Return when done.
_regionManager.RequestNavigate("MyTarget", nameof(SomePage));
}
catch
{
_regionManager.RequestNavigate("MyTarget", nameof(SomeErrorPage));
}
}
雖然我可以在調試通過這一步,並沒有遇到在路上的任何錯誤,RequestNavigation似乎並沒有從另一個線程調用時有任何影響,也不會拋出異常。我確實導航到'SomeProgressPage',任務確實運行,並根據其結果執行後可以跟隨RequestNavigation - 然後什麼也不做。
我也試圖通過事件,如執行該導航:
eventAggregator.GetEvent<NavigationRequestEvent>().Subscribe(x =>
{
regionManager.RequestNavigate(x.Target, x.Destination, x.Parameters);
}, ThreadOption.UIThread);
在這種情況下,用戶甚至沒有事件時發表了一篇名爲。
我一直無法找到任何可信的資源來處理這從我的谷歌搜索,並通過棱鏡連接到源和調試缺乏;在使用Prism時如何最好地實現這種功能?