Meh*_*dad 23 windows winapi doevents visual-c++ winforms
简单的搜索DoEvents会带来很多结果,这些结果基本上会导致:
DoEvents是邪恶的.不要使用它.请改用线程.
一般引用的原因是:
但是一些值得注意的Win32功能,例如TrackPopupMenu并DoDragDrop 执行自己的消息处理以保持UI响应,就像这样DoEvents.
然而,这些问题似乎都没有遇到过这些问题(性能,再入等等).
他们是如何做到的呢?他们如何避免引用的问题DoEvents?(或者做他们?)
Joe*_*orn 28
DoEvents()很危险.但我敢打赌,你每天都会做很多危险的事情.就在昨天,我引爆了一些爆炸装置(未来的读者:请注意相对于某个美国假期的原始发布日期).小心,我们有时可以解释危险.当然,这意味着了解并了解危险是什么:
重新进入的问题.这里实际上有两个危险:
性能问题.DoEvents()可以给出多线程的错觉,但它不是真正的多线程.这至少有三个真正的危险:
可用性问题.这些副作用是由于不能正确解释其他危险造成的.这里没有什么新东西,只要你适当地看其他地方.
如果你能确定你已经解决了所有这些问题,那就继续吧.但实际上,如果DoEvents()是您首先要解决的UI响应/更新问题,那么您可能无法正确解决所有这些问题.如果它不是你看的第一个地方,还有足够的其他选项,我会质疑你是如何考虑DoEvents()的.
现实情况是,大多数情况下,至少在.Net世界中,BackgroundWorker组件几乎一样容易,至少一次完成一次或两次,它将以安全的方式完成工作.最近,异步/等待模式或使用a Task可以更加有效和安全.
| 归档时间: |
|
| 查看次数: |
8643 次 |
| 最近记录: |