C# BackgroundWorker.IsBusy不是100%可靠吗?

C# BackgroundWorker.IsBusy不是100%可靠吗?,c#,.net,multithreading,backgroundworker,C#,.net,Multithreading,Backgroundworker,我有时会遇到一个异常,在使用IsBusy方法检查BackgroundWorker的状态后,它已经在运行了 代码: 是否可能在多个线程中调用CallWorker方法?如果是这种情况,可能是另一个线程开始在IsBusy和RunWorkerAsync之间使用_worker。在这种情况下,您应该使用锁(_worker){}来包围块,而不是尝试{}catch哦,对不起,您没有正确阅读该问题。。。忽略前面的评论…我认为您应该在线程安全开发中调用这部分代码,还是在wpf环境中调用它?是的,似乎可以。我认为在计

我有时会遇到一个异常,在使用IsBusy方法检查BackgroundWorker的状态后,它已经在运行了

代码:


是否可能在多个线程中调用CallWorker方法?如果是这种情况,可能是另一个线程开始在IsBusy和RunWorkerAsync之间使用_worker。在这种情况下,您应该使用锁(_worker){}来包围块,而不是尝试{}catch哦,对不起,您没有正确阅读该问题。。。忽略前面的评论…我认为您应该在线程安全开发中调用这部分代码,还是在wpf环境中调用它?是的,似乎可以。我认为在计划时这是不可能的,因为它是从异步回调调用的,但是如果同时接收两个回调也是可能的,那么这就是问题所在。谢谢,请随意添加您的评论作为答案。您确实正确地阅读了它,我的意思是调用RunWorkerAsync只发生在RunWorker方法中。
if(!_worker.IsBusy)
    _worker.RunWorkerAsync(stateObj); //<-- exception is thrown here
void CallWorker(object stateObj)
{
    try
    {
        if(!_worker.IsBusy)
            _worker.RunWorkerAsync(stateObj);
    }
    catch (Exception e) 
    {
        //ignore OR
        //CallWorker(stateObj);
    }
 }