Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 处理工作线程错误和结果?_C#_Multithreading_Error Handling_Backgroundworker - Fatal编程技术网

C# 处理工作线程错误和结果?

C# 处理工作线程错误和结果?,c#,multithreading,error-handling,backgroundworker,C#,Multithreading,Error Handling,Backgroundworker,我有一个在工作线程中处理一些工作的应用程序。在dowork函数中,我调用了一个DAL函数。根据DAL结果(成功或失败),我将更进一步。下面是我希望如何实现的示例代码 MyFunction() { this.backgroundWorker = new BackgroundWorker(); this.backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork); this.backgr

我有一个在工作线程中处理一些工作的应用程序。在dowork函数中,我调用了一个DAL函数。根据DAL结果(成功或失败),我将更进一步。下面是我希望如何实现的示例代码

MyFunction()
{
    this.backgroundWorker = new BackgroundWorker();
    this.backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork);
    this.backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker_RunWorkerCompleted);
    this.backgroundWorker.RunWorkerAsync();
}
void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    if(e.Error!=null)
    {
    //operation fail
    }
    else if(e.Result!=null)
    {
    //operation succeed
    }
}
void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
    int result=GetResult(10,0);
    int result2=GetResult(10,5);
}
int GetResult(int number1,int number2)
{
    return a/b;
}

看起来您没有在
backgroundWorker\u DoWork
方法中分配
e.Result

应该是这样的:

void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
    e.Result = GetResult(10,5);
}

然后在出现错误的情况下(例如,通过
GetResult(10,0)
),它将是
e.error
中的异常文本,并导致
e.result
,否则-正如您在
backgroundWorker\u RunWorkerCompleted
方法中所期望的那样。

那么您的问题是什么?您是否面临一些问题,出现了一些问题?谢谢您的回复。我无法实现
backgroundWorker\u Runworker Completed
我想使用do worker线程的结果。谢谢您的回复。我已经尝试过在dowork方法中没有选项e.error。您不需要在
\u dowork
中设置
e.error
。只需设置
e.Result
。如果在执行过程中抛出异常,BackgroundWorker将自行设置
e.Error