首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Application.DoEvents();

Application.DoEvents();
EN

Stack Overflow用户
提问于 2009-02-22 01:21:20
回答 3查看 2.4K关注 0票数 4

我如何保持我的C#表单,比如说在一个for循环中,不被锁定?我应该在循环之前还是之后调用Application.DoEvents();?据我所知,使用DoEvents方法将使我的应用程序免于锁定。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-02-22 01:31:30

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

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

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

票数 12
EN

Stack Overflow用户

发布于 2009-02-22 01:29:02

有几种方法,这(DoEvents)只是强制消息泵处理消息。有些人将Thread.Sleep放在线程中循环的末尾(尽管总是在循环中)。你在你的线程中到底在做什么,因为可能有更好的方法来实现你的总体目标?

票数 1
EN

Stack Overflow用户

发布于 2009-02-22 01:32:23

如果进程导致UI锁定长达不可接受的时间,请尝试使用单独的线程(创建线程池、使用线程池或使用BackgroundWorker类。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/574110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档