2

我有一系列 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 

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

请提供任何帮助

4

2 回答 2

10

为什么不在同一个后台工作人员中依次执行所有三个?因此,您的后台工作人员工作事件将如下所示:

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

这样,backgroundworker 本身是异步的,但是你想要顺序运行的三个方法仍然在异步方法的上下文中顺序运行。

于 2012-08-10T21:08:21.957 回答
3

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

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

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

于 2012-08-10T20:58:17.670 回答