C#:如何从线程更新winform?

时间:2010-12-27 18:38:46

标签: c# winforms

C#thread(Read())在尝试根据收到的内容更新winform时会导致System.NotSupportedException。 完整的错误消息是

  

Read()System.NotSupportedException:   无法显示错误消息   因为可选的资源程序集   包含它无法找到   Microsoft.AGL.Common.MISC.HandelAr()   在   System.Windows.Forms.ProgressBar._SetInfo()   在   System.Windows.Forms.ProgressBar.set_Value()   at ... ProcessStatus()at ... Read()

构建/目标环境是:Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE。问题是从Thread写入ProgressBar吗? 如果是这样,从Thread更新ProgressBar的正确C#/ winforms方法是什么?在这个应用程序中,Read()线程是连续的:它在应用程序启动时启动并永远运行。

void ProcessStatus(byte[] status)
{
    Status.Speed = status[5];
    var Speed = Status.Speed/GEAR_RATIO;
    Status.Speed = (int) Speed;
    progressBarSpeed.Value = Status.Speed;
    ...

2 个答案:

答案 0 :(得分:4)

您需要使用Invoke更改在Gui线程中创建的控件。

为了让生活更轻松,请查看一些extension methods provided here

答案 1 :(得分:2)

您应该致电Control.BeginInvoke