而變化WPF標籤的內容我有一個加載了大量的在同一個代碼塊的內容和用戶界面更新一個WPF應用程序,我想表明的進展還是什麼任務是做在Label.Content
物業,目前我「M這樣做:程序加載
void LoadEverything()
{
UpdateContentLabel("Loading items");
foreach(string i in stringArrayItems)
{
UpdateContentLabel("Loading " + i + " info...");
//LoadTasks
}
UpdateContentLabel("Loading history");
}
void UpdateContentLabel(string Task)
{
myLoadLabel.Content = Task;
}
的第一個問題是,標籤內容不更新,我知道,UI線程和任務線程是相同的,這就是爲什麼UI凍結,我試圖用BackgroundWorker
放它負載任務和this.Dispatcher.BeginInvoke((Action)delegate { /*UI Updates */ });
的UI更新(如創建自定義ListBoxItem
並將其添加到ListBox
),並拋出一個在(app
不是第一種形式,是mainApp
對話框,並在登錄窗口中創建)。
BackgroundWorker loadInfo = new BackgroundWorker();
private void app_Loaded(object sender, RoutedEventArgs e)
{
loadInfo.DoWork += loadInfo_DoWork;
loadInfo.RunWorkerCompleted += loadInfo_RunWorkerCompleted;
loadInfo.WorkerReportsProgress = true;
loadInfo.RunWorkerAsync();
}
public void loadInfo_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
UpdateContentLabel("Load complete :)");
}
public void loadInfo_DoWork(object sender, DoWorkEventArgs e)
{
this.Dispatcher.BeginInvoke((Action)delegate { UpdateContentLabel("Loading items"); });
foreach(string i in stringArrayItems)
{
this.Dispatcher.BeginInvoke((Action)delegate { UpdateContentLabel("Loading " + i + " info..."); });
//LoadTasks
this.Dispatcher.BeginInvoke((Action)delegate { /*UI Updates */ });
}
}
所以,問題是我能做些什麼來顯示上述標籤中的當前任務?
編輯: .NET的項目版本是3.5。
您使用的是MVVM模式嗎?你正在使用的任何其他框架? – Noctis
@Noctis不,我沒有使用MVVM或其他框架,我使用的.NET版本是3.5 – FukYouAll