別のスレッドでのものを初期化することに関するスレッドがたくさんあることを知っているので、UIをフリーズする必要はありません。しかし、私の場合、この初期化には多くのプロット (キャンバス内のポリライン) の作成が含まれるため、UI をフリーズする必要があるようです。
物事が初期化されているフレームを非表示にして (下に "loading.." メッセージを既に表示しています)、UI をフリーズしてから (数秒)、フレームを再度表示するだけで十分です。
これは私がこれまでに持っているものです。しかし、機能していません...何も非表示にする前にUIをフリーズし、完全に初期化されたフレームをロードした後にフリーズを解除します。そうでなければ、それは魅力のように機能します。
void Historics_showExperimentResults(object sender, EventArgs e)
{
aepPage = new AEPPage();
resultsPage = new AEPResultSet();
// I try to hide the frame. Below there is a "Loading..." nice text.
// not sure if it's the best way but it works if I dont show anything at the end
ParadigmFrame.Dispatcher.Invoke((Action)delegate
{
ParadigmFrame.Content = null;
ParadigmFrame.UpdateLayout();
});
// This is the initialization that needs to have the GUI thread
//because it draw some plots and polylines
aepPage.Dispatcher.Invoke((Action)delegate
{
aepPage.init(resultSet);
});
//Then I want to go and visualize the initialized page with the plots
ParadigmFrame.Dispatcher.Invoke((Action)delegate
{
ParadigmFrame.Navigate(aepPage);
});
}
どんな手掛かり???私が言ったように、initを別のスレッドに入れ、終了時にイベントを追加しようとしましたが、このスレッドはキャンバス内のポリラインを初期化するためにUIを制御する必要があるため..動作しません:(
前もって感謝します !