如何保持我的C#表单,让我们说是在for循环,从锁定?我打电话给Application.DoEvents();在循环之前或之后?从我听到的使用DoEvents方法会阻止我的应用程序锁定。Application.DoEvents();
4
A
回答
11
您不应该使用Application.DoEvents()以保持应用程序的响应。
调用此方法将允许任何等待的窗口消息被分派。这意味着如果用户点击一个按钮(或执行任何其他用户交互),该操作将被处理。这可能会导致重入。如果他们按下与正在处理的循环相同的按钮,则在完成之前,您将最终再次调用例程!
相反,您应该使用BackgroundWorker线程来执行较长的过程,然后一旦完成操作就执行所需的任何其他操作。例如,一旦按下按钮,您将启动工作线程,然后禁用您的按钮,因此无法再次按下按钮。一旦工作线程完成,您将再次启用该按钮。
1
有几种方法,这(DoEvents)只是强制消息泵来处理消息。有些人在一个线程中将一个Thread.Sleep放在循环的最后(总是在循环内)。你究竟在做什么,因为可能有更好的方法来完成你的目标?
1
如果该过程导致锁死为不可接受的时间量的用户界面中,尝试使用一个单独的线程(或者创建它,使用线程池,或者使用BackgroundWorker类。
相关问题
- 1. 替代Application.DoEvents()
- 2. 在调用Application.DoEvents()
- 3. .net挂在Application.DoEvents
- 4. wxPython Application.DoEvents()等价吗?
- 5. 替代Application.DoEvents()在WPF
- 6. Application.DoEvents()仅适用于WinForms吗?
- 7. FormClosing事件中的Application.DoEvents
- 8. Application.DoEvents()在Java中等价吗?
- 9. Visual Studio性能分析:Application.DoEvents()
- 10. Android等效于C#的Application.DoEvents();
- 11. .NET线程模型和Application.DoEvents与Thread.Sleep
- 12. Application.DoEvents需要很长的时间
- 13. Application.DoEvents() - >在java中的等价函数?
- 14. Application.DoEvents()并在某些机器上冻结
- 15. 在表单级别是否存在“Application.DoEvents”?
- 16. Application.DoEvents()在等待WebBrowser完成加载时出现问题
- 17. Application.DoEvents,什么时候需要,什么时候不需要?
- 18. VB.NET while循环调用application.DoEvents每秒一次
- 19. C#Application.DoEvents不能在我的应用程序中工作
- 20. 覆盖C#中的Application.Doevents(),以便在调试模式下禁用
- 21. 想要调用相同的BackgroundWorker多次没有使用Application.DoEvents
- 22. 如何避免可怕的Application.DoEvents()多线程时
- 23. 在循环中调用Application.DoEvents()所需的替代方法
- 24. Application.DoEvents()在应用程序运行时不断调用?
- 25. 是否有任何替代Application.DoEvents()的Web服务
- 26. 是Application.DoEvents发送消息到一个单独的线程?
- 27. 标签文本将不会更新C# - 刷新和Application.DoEvents不起作用
- 28. 当模态进度对话框启动时,可以调用“Application.DoEvents”吗?
- 29. Devexpress MessageBox正在自动关闭
- 30. 是否将事件返回到子顶部?