我知道有很多关于在不同线程中初始化东西的线程,所以你不需要冻结你的 UI。但在我的例子中,这个初始化涉及创建很多图(画布中的折线),所以它似乎需要冻结 UI。
隐藏正在初始化事物的框架(我已经在下面显示“正在加载..”消息)然后冻结 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 来初始化画布中的折线,所以......它不起作用:(
提前致谢 !