BackgroundWorker打开新窗口并更新它

时间:2015-07-28 00:26:45

标签: wpf multithreading xaml user-interface backgroundworker

我有一个collectionView.dataSource = self is in the .hidden = false function 实用工具,需要做很多处理。处理从WPF完成,利用MainWindow.xaml执行。我想要做的是打开一个名为BackgroundWorker的新单独窗口,并更新Logger.xaml窗口上TextBox执行Logger.xaml进度的MainWindow's。这样做的目的是,用户可以继续从MainWindow.xaml选择更多处理,同时仍然可以获得正在进行的工作的进度更新。因此,在外行人的术语中:1 MainWindow到多个Logger窗口。这是我到目前为止所拥有的。

MainWindow.xaml.cs:

private void btn_Click(object sender, RoutedEventArgs e)
{           
       bw = new BackgroundWorker();
       bw.WorkerReportsProgress = true;
       bw.DoWork += (a, b) => WorkerMethod(x, y); //WorkerMethod does all the heavy lifting
       bw.RunWorkerAsync();
}

private void WorkerMethod(string x, string y)
{
       /***some work 1 code***/
       //Somehow open `Logger.xaml` and update its textbox that some work 1 finished.

       /***some work 2 code***/
       //Update its textbox that Work 2 finished.

       etc...
}

我应该以某种方式使用BackgroundWorker.ProgressChanged在另一个线程上打开一个新的Logger窗口并更新该窗口中的TextBox吗?达到预期效果的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

  

我应该以某种方式使用BackgroundWorker.ProgressChanged打开一个新的   另一个线程上的记录器窗口并更新该窗口中的TextBox?

是的,BackgroundWorker在调用SynchronizationContext()的线程的当前RunWorkerAsync上引发ProgressChanged events

要接收进度更新通知,请处理ProgressChanged事件。要在操作完成时接收通知,请处理RunWorkerCompleted事件。

  

达到预期效果的最佳方法是什么?

如果您想使用BackgroundWorker,可能这是最好的。