等待后台worker完成调用方法

本文关键字:调用 方法 后台 worker 等待 | 更新日期: 2023-09-27 18:09:58

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

private void LaunchApplication(string targetPath, string targetExecutable)
    {
            CopyFiles();
            Process.Start(Path.Combine(targetPath, targetExecutable));
    }

CopyFiles在BackGroundWorker的DoWork方法中被调用。我希望在Process.Start之前完成这个。被称为。现在我有几个可执行文件绑在几个按钮上,所以我不能把Process.Start…

等待后台worker完成调用方法

如果你把CopyFiles()放在后台线程中,下一行代码将被执行,所以在你的情况下,我将而不是使用后台工作线程。相反,我会阻塞,直到复制文件完成,然后启动应用程序。设置一个窗口,告诉你的用户等一会儿。

如果您需要等待并且仍然使用后台工作器,那么CopyFiles()应该在DoWork处理程序中,Process.Start应该在BackgroundWorker.RunWorkerCompleted事件中。

RunWorkerCompleted上的MSDN

RunWorkerCompleted

完成时堆栈溢出示例:

运行Worker完成样例代码

另外,你可以创建一个全局互斥锁来确保一次只发生一个启动,所以如果你有多个启动,只有一个会被处理。

Stack Overflow Global Mutex Question