通常,當有人想要執行一些長時間運行的任務並向UI報告其進度時,在更新UI時,長時間運行的任務將在新線程中調用。 我希望做一個更舒適的方式,是這樣的:WPF - 從不同線程更新主窗口
MainWindow.SetWatingMsg("please wait ...");
doLongRunnnigTask();
MainWindow.RemoveWaitingMsg();
因此,在這種情況下出現的用戶界面在不同的線程從長期運行的任務正在運行一個更新。 我試過這個,在我的主窗口中,我有一個帶有進度條動畫的隱藏視框。在我的應用我有我的主窗口中的引用,所以我的計劃是要具備以下功能,我可以從不同的地方在我的代碼中調用:
public void SetWaitMsg(string msg)
{
if (Session.User != null)
if (Session.User.Configuration.DontShowWaitMsg)
return;
Task.Factory.StartNew(() =>
{
AppMainWindow.Dispatcher.BeginInvoke(DispatcherPriority.Render, (System.Action)delegate()
{
AppMainWindow.pleaseWaitBox.Visibility = Visibility.Visible;
});
});
}
public void RemoveWaitMsg()
{
Task.Factory.StartNew(() =>
{
AppMainWindow.Dispatcher.BeginInvoke(DispatcherPriority.Render, (System.Action)delegate() { AppMainWindow.pleaseWaitBox.Visibility = Visibility.Collapsed; });
});
}
的問題是,這只是不工作,我得到沒有錯誤,只是沒有更新。 UI更新的唯一時間是在調用set和刪除函數之間打開一個確認彈出窗口。
幫助將不勝感激。
感謝
你只調用後臺線程來更新UI消息。這沒有意義。 – 2014-09-03 10:20:03