如何在UWP
應用程序中設置事件循環(主循環)?爲UWP應用程序設置事件循環
我的目標是讓一個應用程序擁有一個不斷更新計算的主頁,然後不斷更新頁面上的圖像。雖然這種情況經常發生,但用戶可以單擊按鈕來更改計算行爲,或轉到第二頁並編輯相關數據。
用戶可以點擊回主頁面,看到圖像和計算重新啓動並不斷更新。 (計算複雜,所以應儘可能快地使用盡可能多的應用程序時間)。
如果有一種方法可以在沒有事件循環的情況下完成此操作,我想知道這一點,但到目前爲止我還沒有找到方法。
使用事件循環,我可以簡單地通過循環更新計算和UI。但我還沒有找到任何辦法。 This question問幾乎相同的東西,但從來沒有直接回答,並有不同的使用情況。
我已經找到了一個解決方案最接近的是抓住從CoreWindow
的CoreDispatcher
並使用RunIdleAsync()
方法來創建一個循環:
public MainPage()
{
this.InitializeComponent();
Windows.UI.Core.CoreWindow appwindow = Windows.UI.Core.CoreWindow.GetForCurrentThread();
Windows.UI.Core.CoreDispatcher appdispatcher = appwindow.Dispatcher;
//create a continuously running idle task (the app loop)
appdispatcher.RunIdleAsync((dummyt) =>
{
//do the event loop here
.
.
.
if (appdispatcher.ShouldYield()) //necessary to prevent blocking UI
{
appdispatcher.ProcessEvents(Windows.UI.Core.CoreProcessEventsOption.ProcessAllIfPresent);
}
});
}
與此的主要問題是,你不能切換頁面(您在調度事件中發送系統異常)。
其次,這非常混亂,需要在事件循環中保持額外的狀態。此外,爲什麼我必須經歷這些扭曲才能在應用等待用戶輸入時進行一些計算?
有沒有辦法做到這一點(除了切換到C++的DirectX應用程序)?
您可能是對的,我需要更多地研究MVVM。你能否提出一個參考來解決我想要完成的事情?微軟的這些文檔都沒有做到這一點。 – mlt
最初,我確實嘗試使用異步任務來完成此任務。我掛斷了在哪裏開始這項任務。我希望當用戶切換到主頁面時啓動任務,但不要求用戶單擊按鈕啓動它。我嘗試使用'OnLoaded()'方法來進行計算並繪製我的動畫,但它從未到達屏幕(卡在'OnLoaded()')中。 – mlt
@mlt可能是因爲您沒有正確使用綁定/任務並阻止UI線程。除了這個之外,我不知道任何關於我頭頂的參考資料:https://msdn.microsoft.com/en-us/library/hh848246.aspx至於你想完成什麼;只需保留UI線程中的任何密集工作即可。 – BradleyDotNET