我有一个winforms应用程序,它调用Application.DoEvents()。现在,应用程序在调用此方法时会冻结(毫不奇怪)。
但是,这只发生在某些机器上。公平地说,这可能是由于机器本身还是仍然是代码/ application.doevents()?在这种情况下,应该重构它以使用backgroundworker。
这会是机器/环境问题还是使用背景工作者的机会?
答案 0 :(得分:6)
如果可以,请使用后台工作人员。 DoEvents
是一个'hack',允许你的应用程序保持响应,并且主要处理WM_PAINT消息,当它正在执行它实际上永远不会执行时:阻止执行超过合理的时间在主GUI循环中的消息处理期间。如果DoEvents
导致挂起而不是修复它,则会有太多消息花费太多系统功率。将它们分配给后台工作人员以立即修复所有这些 - 在“某些机器”成为“大多数机器”之前,这只是时间问题。