在调用方法之前等待背景工作者完成

时间:2013-04-19 14:40:45

标签: c# winforms backgroundworker

我有一个复制一些文件的后台工作者。完成复制文件后,我想启动一个应用程序。我遇到的问题是,当文件正在复制时,它会调用代码来启动应用程序,因此它会运行到正在使用的文件中。我可以做一个检查,以确保只在后台工作者完成时调用某个方法吗?

private void LaunchApplication(string targetPath, string targetExecutable)
    {
            CopyFiles();

            Process.Start(Path.Combine(targetPath, targetExecutable));
    }

在BackGroundWorker的DoWork方法中调用CopyFiles。我希望在调用Process.Start之前完全finsih。现在我有几个可执行文件绑定到几个按钮,所以我不能把Process.Start ...放在RunWorkerCompleted事件中。

1 个答案:

答案 0 :(得分:1)

如果您将CopyFiles()放在后台线程中,则会执行下一行代码,因此在您的情况下,我使用后台工作程序。相反,我会阻止复制文件完成,然后启动应用程序。提出某种窗口告诉你的用法等一下。

如果您需要等待并仍然使用后台工作人员,则CopyFiles()应位于DoWork处理程序中,而Process.Start应为BackgroundWorker.RunWorkerCompleted事件。

RunWorkerCompleted上的MSDN

RunWorkerCompleted

完成时的堆栈溢出示例:

Run Worker Completed Sample Code

此外,您可以创建一个全局互斥锁,以确保一次只发生一次启动,因此如果您多次启动,则只会处理一次。

Stack Overflow Global Mutex Question