我在C#中有一个软件我正在编写,每次执行一项艰巨的任务时我都会切换窗口让它完成窗口的拧紧。不知道如何说出来,但所有按钮都消失或变成“洞”。我知道应用程序正在运行,因为进度条会在一段时间后再次显示。我该如何解决?我一直在寻找,我确信它与doubleBuffering有关。
答案 0 :(得分:2)
通常通过在主UI线程之外的分离线程中执行资源密集型过程来解决此问题,这样UI线程可以根据需要刷新UI,并且可以并行完成持久操作。后台/工作线程完成其任务后,控制流将返回到应用程序。
当您想要从工作线程更新UI线程中的状态栏时,事情会复杂一些,通常您必须使用Invoke方法,因为您绝对不应该尝试从另一个线程访问和修改UI控件
稍微便宜的方法哪种方法有效,但可能会不时出现一些问题,包括在你的长期操作中不时调用Application.DoEvents()
,例如,如果你处于循环中,循环的每几次迭代(取决于执行单次迭代所花费的时间以及总共有多少次迭代);这种方法可以完全避免开始使用多个线程,但也被认为不太可靠。
答案 1 :(得分:0)
正如LarsTech已经指出的那样,使用BackgroundWorker
- 类,特别是对于花费时间超过几秒钟的任务。
请务必使用后台工作程序中的ReportProgress
通知您的进度条。
值得学习的好链接: