【问题标题】:How to call a procedure after finish the Task完成任务后如何调用过程
【发布时间】:2011-07-24 05:28:29
【问题描述】:

我如何知道任务已完成?我想要BackGroundWorker 中的RunWorkerCompleted 事件。

谢谢

【问题讨论】:

    标签: c# multithreading c#-4.0 task


    【解决方案1】:

    你可以使用ContinueWhenAll,所以当所有进程完成时你会通知

    Task.Factory.ContinueWhenAll(myTasks, _ => OnAllTasksFinished());
    
    private void OnAllTasksFinished()
    {
        MessageBox.Show("Finished!");  
    }
    

    【讨论】:

      【解决方案2】:

      我正在从任务中调用多线程方法(最后)

      模式多线程方法:

      private void SomeEventHandler(object sender, EventArgs e)
      {
      MethodInvoker method = delegate
          {
              uiSomeTextBox.Text = "some text";
          };
      
      if (InvokeRequired)
          BeginInvoke(method);
      else
          method.Invoke();
      

      }

      您可以像在 bacroundWorker 中一样安全地使用 WFA

      当 BackGrounWorker 中的算法返回时,他会生成关于工作结束的事件。但是线程对象仍然可以继续存在。是内奇点 Windows 和 CLR,——死后可能存在一段时间的线程。

      【讨论】:

      • :在这段代码的哪一行你可以知道你的工作完成了?
      • 我是在Task方法的末尾调用的,不太好,因为task仍然可以工作,但是我没有找到其他方法。
      • 如果我正确理解你需要在 Yask 关闭时进行线程安全工作。
      • 如果只需要知道线程何时被销毁,可以通过 IsCompleted 属性查看。
      • 你的意思是当线程完成它的工作时调用回调函数不是一种方法?那么 BackGroundWorker 是如何工作的?这不是我定期检查 IsCompleted 属性的好方法
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-21
      • 1970-01-01
      • 1970-01-01
      • 2016-10-02
      • 1970-01-01
      • 2018-10-10
      • 2012-06-15
      相关资源
      最近更新 更多