c# - 从 BackgroundWorker 更新表单上的状态条
问题描述
我目前正在采用现有设计并重构它的某些方面。我试图将 BackgroundWorker 类包装在一个单独的对象中,并在单独的线程上调用数据导入。我唯一的问题是让 StatusStrip 对象在表单上更新。该应用程序使用反射,我在包装导入例程时考虑了这一点。到目前为止,我已经消除了所有的交叉线程。我已将用于更新表单中的 StatusStrip 的回调重定向到此包装器对象中,并且数据导入正在回调包装器。表单中有一个用于处理原始回调的方法。我只需要弄清楚如何跨线程调用更新。
异步操作部分的工作很大程度上归功于我从 stackoverflow 中获得的信息。除了这个愚蠢的 StatusStrip 之外,所有这些都已连接起来。
解决方案
所以,它成功了。
如果在 BackgroundWorker 包装类中被回调,我按照尼克的建议做了以下事情:
private void updtStatus(object sender, EventArgs e)
{ if (MainForm.InvokeRequired)
{ MainForm.Invoke(new DoUIWorkHandler(MainForm.updtStatus), new object[] { sender, e }); }
}
注意:MainForm.updtStatus 是表单上的原始事件,数据导入回调以更新 StatusStrip。
我在另一个stackoverflow线程上发现了这个:
public delegate void DoUIWorkHandler();
而且,我在 BackgroundWorker 包装器的顶部修改了我的代码的委托:
public delegate void DoUIWorkHandler(object sender, EventArgs args);
这是我错过的代表作品!奇迹般有效!感谢您在这件事上的所有帮助。
推荐阅读
- java - Java 泛型函数
- javascript - React js 转换为 typescript,添加数据到 const,interface
- javascript - Android Studio 向 webview 显示单个元素
- python - Python 3 中的停用词
- reactjs - TypeError:无法读取未定义 reactjs 的属性“绑定”
- android - 我们如何在android中增加按钮长按监听时间?
- javascript - 在“升级”到 select2 后向 dom 添加元素
- python - OpenCV + Python的手部识别脚本不起作用
- perl - 如何下载 Perl 脚本的 p4.pm(perforce) 模块?
- verilog - 使用串联和大小写时,移位器输出始终为 0