学习构建多线程WPF应用程序时,我读到了一些关于使用BackgroundWorker的限制,但对我来说并不是很清楚。请帮助我理解:
如果我想要不仅有一个线程在UI后台运行,而是可能有几个线程,彼此独立地启动和结束,那么BackgroundWorker适用吗?我可以有多个BackgroundWorker实例吗?
简单地说,BackgroundWorker是否提供了多线程而不仅仅是两个线程?
学习构建多线程WPF应用程序时,我读到了一些关于使用BackgroundWorker的限制,但对我来说并不是很清楚。请帮助我理解:
如果我想要不仅有一个线程在UI后台运行,而是可能有几个线程,彼此独立地启动和结束,那么BackgroundWorker适用吗?我可以有多个BackgroundWorker实例吗?
简单地说,BackgroundWorker是否提供了多线程而不仅仅是两个线程?
BackgroundWorker
都在单独的线程上运行。您可以创建尽可能多的后台工作器,以并行地运行操作,因此从这个意义上说,它是真正的多线程。
BackgroundWorker
的好处在于,当耗时任务完成时,您可以轻松订阅事件,该事件将在UI线程上触发。BackgroundWorker
非常简单:var worker1 = new System.ComponentModel.BackgroundWorker();
worker1.DoWork += (sender,e) => Thread.Sleep(10000);
worker1.RunWorkerCompleted += (sender,e) => MessageBox.Show("Worker1 Finished!");
worker1.RunWorkerAsync();
BackgroundWorker
实例,则会得到许多线程,但是单个实例仅提供单个后台任务。是的,内部,后台工作者会在您提供的委托上调用BeginInvoke。这将导致您的委托被放置在CLR中的线程池中。