[英]Winform running functions in parallel using backgroundworker possible?
我需要并行运行四个函数,同时保持UI响应和报告进度,后台工作者是这样做的最佳方式吗? 我怎么能在winform中做到这一点?
是的,使用任务并行库。 你可以运行类似的并行任务
Parallel.Invoke(() => DoSomeWork(), () => DoSomeOtherWork());
它为您提供了比后台工作者更多的选择
更多参考: TPL
您可以使用BackgroundWorker
执行此操作,但我建议使用任务并行库 。 对于你想要的,你可以使用如下的东西
TaskCreationOptions atp = TaskCreationOptions.AttachedToParent;
Task.Factory.StartNew(() =>
{
Task.Factory.StartNew(() => { SomeMethod() }, atp);
Task.Factory.StartNew(() => { SomeOtherMethod() }, atp);
}).ContinueWith( cont => { Console.WriteLine("Finished!") });
这是使用子任务,这里我有两个,你会用四个。 由于TPL使用了对真正并发操作数量有限制的线程池,因此需要注意一些限制。 请查看此https://stackoverflow.com/a/11229896/626442以获取有关TPL和通用线程的更多信息,请参阅
和(特别为TPL)
最好的方法是使用Task
,它是BackgroundWorker
的替代品
您可以在此处查看如何从Task
报告进度: http : //nitoprograms.blogspot.co.il/2012/02/reporting-progress-from-async-tasks.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.