winforms - 任务完成后才显示进度条

标签 winforms multithreading

我一直在尝试将进度条设置为选取框,以便在另一个功能运行时继续移动。该函数运行后,我将显示消息(对于本例)

我能够完成这项工作的唯一方法是与后台工作人员一起工作,然后有一个

做 循环直到在主窗体中运行的条件,直到操作完成,然后是我的消息框。

这似乎是完成此任务的一种拼凑方法,而 thread.start 后跟 thread.join 似乎是解决此问题的更好方法。但是,我也无法使其正常工作。

如果有人感兴趣,我已经提供了一个小型演示程序。 http://www.filedropper.com/progressbar

谢谢

最佳答案

Thread.StartThread.Join 不是这样做的方法 - 这基本上会再次阻塞您的 UI 线程。 Application.DoEvents 也不是可行的方法 - 您确实需要一个单独的线程。

然后您可以使用 Control.Invoke/Control.BeginInvoke 编码(marshal)回 UI 线程,但是 BackgroundWorker让这一切变得更加容易。搜索“BackgroundWorker 教程”会产生大量点击。

编辑:要在工作人员完成时显示消息,请使用 RunWorkerCompleted事件。 ReportProgress方法和ProgressChanged事件用于处理更新进度条。 (UI订阅ProgressChanged,任务定期调用ReportProgress。)

关于winforms - 任务完成后才显示进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/705745/

相关文章:

c# - 读取并解析 JSON 数据

c# - 如何在自定义用户控件(.Net 4、Winforms)上使用项目集合编辑器?

.net - WPF 中的数据绑定(bind)以何种方式改进了过去的框架?

multithreading - 在多线程上执行 SoapUI 测试

c++ - 如何使用asio简化多线程设计?

java - 帮忙看看下面的代码,是线程安全的吗?

c# - 如何将程序集加载到内存中并执行

c# - WinForms 自定义组合框不显示 List<> 项目的名称

c++ - 缓存的不可变值 : avoid lock

c++ - 最多同步派生的析构函数