我一直在尋找並發現執行後臺工作和更新GUI的好方法是使用後臺工作人員。但是,做這個(愚蠢的)小任務(從1到10000),它不更新標籤內容,但打印到調試! (這僅僅是當然的另一項目標溶液...)使用BackgroundWorker更新GUI
下面的代碼:
public partial class MainWindow : Window
{
BackgroundWorker bw = new BackgroundWorker();
public MainWindow()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
bw.WorkerReportsProgress = true;
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
bw.RunWorkerAsync();
}
void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("DONE");
}
void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
label1.Content = "going here: "+e.ProgressPercentage;
Debug.WriteLine(e.ProgressPercentage);
}
void bw_DoWork(object sender, DoWorkEventArgs e)
{
for (int i=0; i < 10000; i++)
{
bw.ReportProgress((i*100)/10000);
}
}
}
+1。Very good。還加入'Thread.Sleep(10);'會有幫助。 – Aliostad 2011-03-04 11:41:33
相信或者沒有,我在看到你的評論之前就想到了它!調用... – 2011-03-04 11:58:18
當然,更容易綁定到一個屬性並從工作線程更新。 – Stimul8d 2011-03-04 12:10:50