【问题标题】:c# wait for background worker to complete taskc# 等待后台工作者完成任务
【发布时间】:2017-12-29 13:24:11
【问题描述】:

所以我有一个执行任务的后台工作人员,我需要程序在继续之前等待该任务完成,目前我正在这样做:

while(backgroundwork.IsBusy)
{
    Thread.Sleep(10);
}

但是当我运行这个程序时,程序只是停止运行,似乎后台工作人员一直在运行,但事实并非如此,工作人员中没有循环,它之前已经完成了它的任务。

我可能错过了什么?

【问题讨论】:

  • 有什么阻止你使用后台工作者完成的事件吗?
  • Thread.Sleep 将导致当前线程(即前台线程)休眠。当它在睡觉时,它什么也没做。展示如何创建后台工作人员的代码。
  • 后台工作者的全部意义在于UI线程不等待它完成。如果你这样做,你也可以直接调用代码,而不是通过后台工作人员。使用后台工作人员的正确方法是订阅RunWorkerCompleted 事件并在任务完成后在 UI 中执行任何需要完成的操作那里
  • @Heinzi 我认为该评论可能是答案。虽然你不能真正回答一个不完整的问题:(
  • 请阅读如何创建minimal, complete, verifiable example 并通过编辑将缺少的信息添加到您的帖子中:) 如果您还没有阅读how to ask,我建议您这样做:) 我强烈推荐遵循我链接的 2 个指南,因为当帖子遵循这些指南时,SO 上的人更有可能回答问题。我特别缺少的是 - 到目前为止你尝试了什么?您面临哪些错误/问题?您可能有有助于理解您的问题的 coden-ps 吗?欢迎使用 StackOverflow

标签: c# backgroundworker


【解决方案1】:

您可以使用BackgroundWorker.RunWorkerCompleted 事件。您可以等待 WaitHandle(如 autoresetevent),并从 RunWorkerCompleted 事件发出信号。

【讨论】:

    【解决方案2】:

    Thread.Sleep用于等待指定时间,什么也不做。

    Async wait 用于等待给定任务完成。

    myMethod().wait() - 这里 myMethod 将是你的异步方法和 wait() 是 c# 关键字,它将异步等待该方法 完成。

    查看 thread.sleep() 和异步延迟之间的区别 - Here!!

    【讨论】:

    • myMethod 是什么? (抱歉我很久没编程了)
    • myMthod() 是您的方法,其中包含您需要的一段代码 - 等待任务完成。
    • 在按钮点击事件中?
    【解决方案3】:

    解决方案:

    正如Heinzi 在评论中所说,您应该只使用 RunWorkerCompleted 事件。

    Here 是关于“如何使用后台工作程序 runworkercompleted 事件”的一个很好的例子你永远不会“等待”任务/线程完成,但你可以“等待”等待句柄或让线程做其他事情同时

    在你持有一个实例的类中 Backgroundworker 您可以简单地附加到已完成的活动,然后就可以了。

    删除包含 Thread.Sleep() 的循环

    .

    private void WorkerExample() {
        BackgroundWorker bw = new BackgroundWorker();
        bw.RunWorkerCompleted += OnWorkerCompleted; //listen for that event by attaching a handler
        bw.RunWorkerAsync();
    }
    
    //This is the EventHandler
    private void OnWorkerCompleted(object sender, RunWorkerCompletedEventArgs runWorkerCompletedEventArgs) {
        //This method is called, when the worker finished his job
    }
    

    更多信息:

    BackgroundWorker 上还有一些更有用的事件。

    MSDN provides一个完整的例子如何使用BackgroundWorker。你应该看看那个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-14
      • 2013-04-09
      • 2019-04-29
      • 2022-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多