Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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# 如何重新运行BackgroundWorker_C#_Backgroundworker - Fatal编程技术网

C# 如何重新运行BackgroundWorker

C# 如何重新运行BackgroundWorker,c#,backgroundworker,C#,Backgroundworker,我需要在DoWork期间捕获错误,如果错误属于某种类型,则重新运行同一个worker。在已完成的事件期间,已尝试取消它并调用RunWorkerAsync(),但没有成功(出现异常,表示我的backgroundworker对象已取消)。我猜Bgw将保持错误/取消状态,直到完成的事件完成 有几个选择: 重新启动DoWork中的逻辑 从已完成的事件启动另一个Bgw Bgw本身并不昂贵,因此重用特定实例没有什么意义。线程来自线程池。在backgroundworker DoWork中处理错误不是更有意

我需要在
DoWork
期间捕获错误,如果错误属于某种类型,则重新运行同一个worker。在
已完成的
事件期间,已尝试取消它并调用
RunWorkerAsync()
,但没有成功(出现异常,表示我的backgroundworker对象已取消)。

我猜Bgw将保持错误/取消状态,直到完成的事件完成

有几个选择:

  • 重新启动DoWork中的逻辑
  • 从已完成的事件启动另一个Bgw

Bgw本身并不昂贵,因此重用特定实例没有什么意义。线程来自线程池。

在backgroundworker DoWork中处理错误不是更有意义吗?我会处理它,但它仍会继续完成事件处理程序。。。“可能是去吧?”虚无主义者,现在听起来像是道具内部的控制流问题。捕获异常后完全可以重新启动某些操作。DoWork只是另一种方法。@Henk Holterman,在DoWork事件处理程序中调用DoWork(this,null)?@虚无主义者,至少用
DoWork(sender,e)调用它但是它真的不应该是必需的。如果没有代码示例,很难说为什么不需要
goto
。没错,它实际上仍然处于取消状态。我不能使用另一个对象来创建bgw,因为正在检查bgw.IsBusy是否正好在该bgw对象上,比如说,按钮单击。所以我认为在DoOrk使用Goto来启动它。谢谢你的回答,我应该在DowWork中调用DowWork吗?(恨goto:)(很遗憾,但我现在无法测试代码,这就是为什么我要问这样的问题:()假设它被称为backgroundWorker1,那么只需执行:
backgroundWorker1=new BackgroundWorker();…//附加事件;backgroundWorker1.RunAsync();