我有一个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
吗?达到预期效果的最佳方法是什么?
答案 0 :(得分:0)
我应该以某种方式使用BackgroundWorker.ProgressChanged打开一个新的 另一个线程上的记录器窗口并更新该窗口中的TextBox?
是的,BackgroundWorker
在调用SynchronizationContext
()的线程的当前RunWorkerAsync
上引发ProgressChanged
events。
要接收进度更新通知,请处理ProgressChanged事件。要在操作完成时接收通知,请处理RunWorkerCompleted事件。
达到预期效果的最佳方法是什么?
如果您想使用BackgroundWorker,可能这是最好的。