链的多个背景工作者

时间:2012-08-10 20:54:31

标签: c# .net multithreading backgroundworker

我有一系列3个耗时的函数,我想在后台工作者或其他任何工具中执行它们,我的问题是每个函数都应该等待先前函数完成,所以这是我的伪代码:

open_session() // during the execution of this function i like to display a loading-window 

open_session() //this function opens a process another windows app , while opening this app i would like to keep the current app responsive.

close_session()// during the execution of this function i like to display a loading-window 

我想用背景工作者来做这件事,但是功能是异步的。

请帮助

2 个答案:

答案 0 :(得分:10)

为什么不在同一个后台工作程序中按顺序执行所有这三个?因此,您的背景工作者工作事件将如下所示:

private void yourBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
    open_session();
    open_session();
    close_session();
}

这样,后台工作程序本身就是异步的,但是你想要按顺序运行的三种方法仍然在异步方法的上下文中顺序运行。

答案 1 :(得分:3)

只需启动前一个RunWorkerCompleted事件处理程序中的每个连续工作程序...

打击downvotes:请注意,这是的可能性。它是否是一个好的选择,显然取决于上下文,就像一直。我不相信黄金法则,例如“只使用一个BGW更好”。我可以想象很多情况,在这种情况下,对所有任务使用单个BW不会简化问题(例如,如果每个操作都需要以不同的方式处理ProgressChanged)。

OP询问了多个背景工作者,没有给出足够的背景来判断哪种方法最好 - 据我所知,他可能只是在理论上想知道如何“链接”BW,以便更好地理解BW是如何工作的。