我经常在winforms应用程序中使用此代码来等待事件,而不使用线程.
while(checkSomething()){
Application.DoEvents();
}
Run Code Online (Sandbox Code Playgroud)
循环运行时程序和PC仍然响应,但是如果我在任务managart中查看cpu使用情况,则使用率报告为100%.你知道为什么会这样吗?
nos*_*nos 12
Application.DoEvents()检查是否有一些事件需要处理然后处理它们,然后返回.如果您checkSomething()没有阻止任何实施繁忙循环的事情.
也就是说,您的处理器正忙着运行Application.DoEvents()并且checkSomething()尽可能快.
如果您的checkSomething没有检查与其他线程相关的数据,您实际检查的是什么? - 听起来像是一个你应该处理而不是轮询的事件.
Ree*_*sey 10
当你添加这个:
while(checkSomething()){
Application.DoEvents();
}
Run Code Online (Sandbox Code Playgroud)
你基本上是说让程序处理windows消息,尽可能快,没有任何停止它,直到"checkSomething"返回true.
有很多理由可以避免DoEvents - 如果您真的打算这样做,您应该尝试在循环中放弃一些处理时间:
while(checkSomething()){
Application.DoEvents();
Thread.Sleep(10); // Sleep a tiny amount...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3185 次 |
| 最近记录: |