代码之家  ›  专栏  ›  技术社区  ›  Andrea Parodi

为什么?应用程序.DoEvents使cpu使用率提高到100%

  •  2
  • Andrea Parodi  · 技术社区  · 15 年前

    我经常在winforms应用程序中使用此代码来等待事件,而不使用线程。

    while(checkSomething()){
        Application.DoEvents();
    }
    

    你知道为什么会这样吗?

    5 回复  |  直到 15 年前
        1
  •  10
  •   John    15 年前

    添加此项时:

    while(checkSomething()){
        Application.DoEvents();
    }
    

    你基本上是说让程序处理windows消息,尽可能快,没有任何停止它,直到“checkSomething”返回true。

    有很多 reasons to avoid DoEvents -也就是说,如果您真的打算这样做,您应该尝试在循环中放弃一些处理时间:

    while(checkSomething()){
        Application.DoEvents();
        Thread.Sleep(10); // Sleep a tiny amount... 
    }
    
        2
  •  12
  •   nos    15 年前

    应用程序.DoEvents()检查是否有需要处理的事件,然后处理它们,然后返回。如果你的 checkSomething()

    也就是说,您的处理器正忙于运行 Application.DoEvents() 尽可能快。

        3
  •  1
  •   Adam Lear    15 年前

    因为你在忙着等待 checkSomething() call始终返回true。CPU正在运行 检查某物() 打电话。当它评估为 true ,您将保持在循环中,处理事件,然后重新开始。

        4
  •  1
  •   sh_kamalh    15 年前

        5
  •  0
  •   bevacqua    15 年前

    因为。。。不管它做什么,它都不停地做?