如何将值从另一个线程传递到GUI以说明C#的进度?

时间:2013-01-18 07:10:05

标签: multithreading

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

这就是我所拥有的。具有GUI事件的基本Windows窗体类,由其他Windows窗体类继承。 Plus Base类,包含其他类继承的方法和属性。其他类表示我迁移到我的应用程序中的不同图像管理应用程序的图像格式。所以我只需从下拉菜单中选择另一个应用程序名称,然后打开相应的GUI,允许我选择图像源。

  • 部分ClassA,包含所有GUI事件,如按钮单击和标签文本。
  • 继承自ClassA的部分ClassA。
  • 抽象ClassB,包含虚方法。另外,我想使用该属性向标签报告进度。
  • 继承ClassB并使用继承类中的方法和属性的ClassB2。该方法在ClassB
  • 中被覆盖
  • 对象ClassB在ClassA中声明,并在ClassA2中初始化为ClassB2。
  • 在按钮单击事件的ClassA中,我使用BackGroundWorker对象,该对象使用包含委托参数的EventHandler引发DoWork事件,该委托参数包含处理文件的重写方法。我在这里得到解决方案 How do I run a simple bit of code in a new thread?

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

我尝试使用某种解决方案但是没有创建异常Window Handle。 How to update the GUI from another thread in C#?

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

0 个答案:

没有答案