如何向backgroundWorker发出指令并正确处理结果?

时间:2016-03-10 21:29:28

标签: c# multithreading winforms asynchronous backgroundworker

我的winform应用程序通过USB与外部设备通信。对于我的应用程序之间的通信设备我使用backgroundWorker。这样我可以保证,一次只进行一次通信。 我正在使用e.argument向bW发出如下指令:backgroundWorker1.RunWorkerAsync("TASKX")和e.Result值以将结果传递给主应用程序。 有很多任务,因为我必须为每个任务处理不同的结果,所以我在RunWorkerCompleted函数中得到了很多案例。

以下是我在bW_DoWork函数中使用的代码:

private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
  if((string)e.Argument="TASK1")
  {
    //do something
    if(result==1)
      e.Result = "TASK1_RESULT1";
    if(result==2)
      e.Result = "TASK1_RESULT2";
    //...
  }
  else if((string)e.Argument="TASK2")
  {
    //do something
    if(result == 1)
      e.Result = "TASK2_RESULT1";
    //...
  }
  //and so on...
}

以下是我的bW_RunWorkerCompleted中的代码:

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    if (e.Cancelled == true)
    {
        //handle cancelation
    }
    else if (e.Error != null)
    {
        //handle error
    }
    else
    {
      //handle all cases
      if(e.Result=="TASK1_RESULT1)
      //and so on...        
    }
}

现在我想知道是否有更好或更清洁的方式来提供bW指令,或者我应该使用完全不同的解决方案。

0 个答案:

没有答案