2

我有一个程序,它以一个循环的方法处理图像文件,该循环在一个线程中运行,而 GUI 运行另一个线程。在处理过程中,我想从处理完成的方法向 GUI 报告进度。

这就是我所拥有的。带有 GUI 事件的基础 Windows 窗体类,由其他 Windows 窗体类继承。加上具有由其他类继承的方法和属性的基类。其他类代表来自我迁移到我的应用程序中的不同图像管理应用程序的图像格式。所以我只需从下拉菜单中选择另一个应用程序名称,它会打开适当的 GUI,允许我选择图像源。

  • 部分 ClassA 包含所有 GUI 事件,例如按钮单击和标签文本。
  • 从 ClassA 继承的部分 ClassA2。
  • 包含虚方法的抽象 ClassB。另外,我想用来向标签报告进度的属性。
  • ClassB2 继承 ClassB 并使用继承类的方法和属性。该方法在 ClassB 中被覆盖
  • 对象 ClassB 在 ClassA 中声明并在 ClassA2 中初始化为 ClassB2。
  • 在按钮单击事件的 ClassA 中,我使用 BackGroundWorker 对象,该对象使用 EventHandler 引发 DoWork 事件,该 EventHandler 包含包含处理文件的覆盖方法的委托参数。我在这里找到了解决方案 如何在新线程中运行一些简单的代码?

该方法包含一个属性,每次循环通过时都会分配一个新值,我想获取该值并在每次循环通过并更改它时将其显示在 GUI 上。

我尝试使用一些解决方案,但未创建异常窗口句柄。 如何从 C# 中的另一个线程更新 GUI?

string newText = "abc";
this.Invoke((MethodInvoker)delegate {
someLabel.Text = newText;
});

另外,我试过了,但 InvokeRequired 属性返回 FALSE 值

http://www.codeproject.com/Articles/52752/Updating-Your-Form-from-Another-Thread-without-Cre

4

0 回答 0