我有一个复制一些文件的后台工作者。完成复制文件后,我想启动一个应用程序。我遇到的问题是,当文件正在复制时,它会调用代码来启动应用程序,因此它会运行到正在使用的文件中。我可以做一个检查,以确保只在后台工作者完成时调用某个方法吗?
private void LaunchApplication(string targetPath, string targetExecutable)
{
CopyFiles();
Process.Start(Path.Combine(targetPath, targetExecutable));
}
在BackGroundWorker的DoWork方法中调用CopyFiles。我希望在调用Process.Start之前完全finsih。现在我有几个可执行文件绑定到几个按钮,所以我不能把Process.Start ...放在RunWorkerCompleted事件中。
答案 0 :(得分:1)
如果您将CopyFiles()
放在后台线程中,则会执行下一行代码,因此在您的情况下,我不使用后台工作程序。相反,我会阻止复制文件完成,然后启动应用程序。提出某种窗口告诉你的用法等一下。
如果您需要等待并仍然使用后台工作人员,则CopyFiles()
应位于DoWork
处理程序中,而Process.Start
应为BackgroundWorker.RunWorkerCompleted
事件。
RunWorkerCompleted上的MSDN
完成时的堆栈溢出示例:
Run Worker Completed Sample Code
此外,您可以创建一个全局互斥锁,以确保一次只发生一次启动,因此如果您多次启动,则只会处理一次。