我的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指令,或者我应该使用完全不同的解决方案。