b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

C#while 线程等待_backgroundworker正忙_backgroundworker(2)

电脑杂谈  发布时间:2017-01-17 23:59:50  来源:网络整理

本文地址:IT屋 » BackgroundWorkers never stop being busy

 的(做一堆次)
{
    而(backgroundWorker1.IsBusy&安培;&安培; backgroundWorker2.IsBusy和放大器;&安培;
           backgroundWorker3.IsBusy&功放;&安培; backgroundWorker4.IsBusy&功放;&安培;
           backgroundWorker5.IsBusy)
    {
        System.Threading.Thread.Sleep(0001);
    }

    如果(!backgroundWorker1.IsBusy)
    {
        backgroundWorker1.RunWorkerAsync();
    }
    否则,如果(!backgroundWorker2.IsBusy)
    {
        backgroundWorker2.RunWorkerAsync();
    }
    否则,如果(!backgroundWorker3.IsBusy)
    {
        backgroundWorker3.RunWorkerAsync();
    }
    否则,如果(!backgroundWorker4.IsBusy)
    {
        backgroundWorker4.RunWorkerAsync();
    }
    否则,如果(!backgroundWorker5.IsBusy)
    {
        backgroundWorker5.RunWorkerAsync();
    }
}
 

运行5次(每次BG-工人一次),并卡在一段时间。不要将backgroundworkers永远停止正在忙吗?我怎么查询?

请注意:有5个工作线程,这样保证其中没有一个是以往任何时候都停止了,总是分配工作给他们。但他们拒绝告诉我的时候都可以,我认为将有一个简单的解决方案。

其实这只是一个虚拟的参数,我删除它,忘了把它弄出来,我只用它来调用DoWork的,谁做的肮脏的工作:

 私人无效backgroundWorker1_DoWork(对象发件人,DoWorkEventArgs E)
{
    timeconsumingfunction(publicstring);
}
 

backgroundworker_backgroundworker正忙_C#while 线程等待

而timeconsumingfunction DOES结束。步入这在调试和运行的每行线,它会直到结束,到达最后的“}”。这意味着它结束了吧?

  System.Threading.Thread.Sleep(0001);
 

  Application.DoEvents();
 

我想它会运行的后台,但没有得到答案,而不是更新IsBusy标签。

谢谢大家,伟大的答案,帮助了很多!

解决方案

您环路导致僵局,BGWs无法完成。问题是RunWorkerCompleted事件,它提高了UI线程。对BGW魔法位需要UI线程被闲置,必须抽它的消息循环。backgroundworker问题是,在UI线程是没有闲着,它是不抽的消息,它被卡在for循环。因此,该事件处理程序不能运行,IsBusy保持为真。backgroundworker

您将需要不同的方法来做这个。杠杆RunWorkerCompleted事件运行code,你会通常在此之后运行循环。一切诱惑,调用Application.DoEvents()内循环。

本文地址:IT屋 » BackgroundWorkers从来没有停止忙


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-27010-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 莫元启
      莫元启

      不开雷达不装炮弹电磁辐射对于军舰来说已经最低了还被直接找到

    • 邵洋洋
      邵洋洋

    热点图片
    拼命载入中...