1

我有一个调用 Application.DoEvents() 的 winforms 应用程序。现在应用程序在调用此方法时冻结(不足为奇)。

但是,这只发生在某些机器上。公平地说这是由于机器本身还是仍然取决于代码/application.doevents()?在这种情况下,应该将其重构为使用 backgroundworker。

这是机器/环境问题还是使用后台工作人员的机会?

4

1 回答 1

6

如果可以,请使用后台工作人员。DoEvents是一种“黑客”,可让您的应用程序保持响应,并主要处理 WM_PAINT 消息,当它在做一些实际上不应该做的事情时:在主 GUI 循环中的消息处理期间阻止执行超过合理的时间。如果DoEvents导致挂起而不是修复它,那么您有太多的消息会花费太多的系统电源。将它们分派给后台工作人员以立即解决所有问题-否则“某些机器”变成“大多数机器”只是时间问题。

于 2013-05-10T13:15:28.563 回答