2

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

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

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

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

4

1 回答 1

1

如果您放入CopyFiles()后台线程,则将执行下一行代码,因此在您的情况下,我不会使用后台工作人员。相反,我会阻止直到复制文件完成,然后启动应用程序。设置某种窗口,告诉您的用户稍等片刻。

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

MSDN on RunWorkerCompleted

RunWorker 已完成

已完成的堆栈溢出示例:

运行 Worker 完成的示例代码

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

Stack Overflow 全局互斥量问题

于 2013-04-19T15:37:26.477 回答