c# - 在调用方法之前等待后台工作人员完成

标签 c# winforms backgroundworker

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

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

RunWorkerCompleted

已完成的堆栈溢出示例:

Run Worker Completed Sample Code

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

Stack Overflow Global Mutex Question

关于c# - 在调用方法之前等待后台工作人员完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16107226/

相关文章:

c# - 如何通过线路输入(麦克风)播放声音文件?

c# - Nuke 构建 .nuke 文件并构建多个解决方案

c# - 无法从 .net core 运行注册协议(protocol)进程,但可以从 .net Framework 运行

f# - 编写轮询 Windows 服务

c# - 在新任务中打开另一个 View WPF caliburn.micro c#

c# - dataGridView "remove empty rows"- 按钮

c# - ToolStrip.Background 仅更改按钮的背景 (C#/.NET/WinForms)

c# - 在 linq 结果中插入额外数据但不插入数据源或等待提交对上下文对象的更改

c# - 线程FTP上传C#

c# - 使用不同的参数多次调用 BackgroundWorker.RunWorkerAsync()