我有一个复制一些文件的后台工作人员。完成文件复制后,我想启动一个应用程序。我遇到的问题是,在复制文件时,它会调用代码来启动应用程序,因此它会遇到文件正在使用错误。是否可以进行检查以确保仅在后台工作程序完成时才调用特定方法?
private void LaunchApplication(string targetPath, string targetExecutable)
{
CopyFiles();
Process.Start(Path.Combine(targetPath, targetExecutable));
}
CopyFiles 在 BackGroundWorker 的 DoWork 方法中被调用。我希望它在调用 Process.Start... 之前完全完成。现在我有几个可执行文件绑定(bind)到几个按钮,所以我不能把 Process.Start... 放在 RunWorkerCompleted 事件中。
最佳答案
如果您将 CopyFiles()
放在后台线程中,将执行下一行代码,因此在您的情况下,我不会使用后台 worker 。相反,我会阻塞直到复制文件完成,然后启动应用程序。设置某种窗口告诉您的用户稍等。
如果您需要等待并仍然使用后台工作程序,则 CopyFiles()
应该在 DoWork
处理程序和 Process.Start
中应该是 BackgroundWorker.RunWorkerCompleted
事件。
关于 RunWorkerCompleted 的 MSDN
已完成的堆栈溢出示例:
Run Worker Completed Sample Code
此外,您还可以创建一个全局互斥体以确保一次只进行一次启动,因此如果您进行多次启动,则只会处理一次。
关于c# - 在调用方法之前等待后台工作人员完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16107226/