c# - 等待后台 worker 完成而不阻塞 UI 线程

标签 c# multithreading backgroundworker

我有一个应用程序需要等待后台工作人员完成才能继续。后台工作人员负责将一些值写入初始化它的 USB 设备。后台工作程序的问题是我的主程序可以在后台工作程序完成初始化之前尝试访问 USB 设备。

当后台工作人员工作时,UI 线程会显示带有动画进度条的“请稍候”。进度条反射(reflect)后台 worker 的进度,它只是“旋转”。

我读过几个问题说不要使用后台 worker ,因为我真的不希望它异步运行(这是真的),但是,如果不使用后台 worker ,我的“请稍候”对话框会阻塞并且不显示动画。我也读了很多告诉我只使用一个 UI 线程,然后支持使用后台工作程序。

我也曾尝试将“请稍候”微调器放在单独的线程中,但这会带来复杂性和奇怪的竞争条件,即“请稍候”窗口会在打开之前尝试关闭。

解决这个问题的正确方法是什么?

最佳答案

这正是 BackgroundWorker 的设计目的。虽然还有其他方法可以实现此目的,但您正在做的就很好。

关于c# - 等待后台 worker 完成而不阻塞 UI 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13254716/

相关文章:

android - 具有动态适配器更改的 MultiAutoCompleteTextView

c# - 让异常冒泡

c# - 在后台线程上散列大文件

c# - C# linq to datatable 中的 Where 子句

multithreading - 在 pthread、Intel TBB、openmp 上哪个库更通用、更灵活?

c++ - 按执行顺序创建pthread

Java - 分阶段线程

c# - 为什么WPF中的BackgroundWorker需要Thread.Sleep来更新UI控件?

c# - 将 IList 转换为列表

c# - C# 编译器实现了哪些语言扩展?