c# - 应用程序.DoEvents();

标签 c# multithreading

如何让我的 C# 表单(比如说处于 for 循环中)免于锁定?我调用 Application.DoEvents();在循环之前还是之后?据我所知,使用 DoEvents 方法可以防止我的应用程序锁定。

最佳答案

您不应使用 Application.DoEvents() 来保持您的应用程序响应。

调用此方法将允许调度任何等待的窗口消息。这意味着如果用户单击按钮(或执行任何其他用户交互),将处理该操作。因此,这可能会导致重入。如果他们按下与导致您正在处理的循环的按钮相同的按钮,您将最终在完成之前再次调用例程!

相反,您应该使用 BackgroundWorker线程来执行长过程,然后在操作完成后执行所需的任何其他操作。例如,一旦按下一个按钮,您将启动工作线程,然后禁用您的按钮,这样就无法再次按下它。工作线程完成后,您将再次启用该按钮。

关于c# - 应用程序.DoEvents();,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/574110/

相关文章:

c# - 如何从不同类中的计时器事件处理程序更新标签文本?

c# - 在 C# 代码 WPF 中将 TextBlock 添加到标签

c# - 将 Enumerable.ToDictionary 与扩展方法一起使用时为 "CLR detected an Invalid Program"

c# - 使用 cer 文件加密 Xml

multithreading - 套接字 : how execute two threads simultaneously without stop?

c# - winform 在悬停时更改按钮的 BackgroundImage 属性

c++ - 不能通过引用传递给线程

c# - Threading.Volatile.Read(Int64) 和 Threading.Interlocked.Read(Int64) 之间的区别?

c - gcc:编译为 BSS 的线程局部变量

java - 什么样的行为会导致异常中断?