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

C#:如何从线程更新winform?,c#,winforms,C#,Winforms,当C#线程(Read())尝试根据接收到的内容更新winform时,会导致System.NotSupportedException。 完整的错误消息是 Read()System.NotSupportedException: 无法显示错误消息 因为一个可选的资源程序集 在上找不到包含它的 Microsoft.AGL.Common.MISC.HandelAr() 在 System.Windows.Forms.ProgressBar.\u SetInfo() 在 System.Windows.Form

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

Read()System.NotSupportedException: 无法显示错误消息 因为一个可选的资源程序集 在上找不到包含它的 Microsoft.AGL.Common.MISC.HandelAr() 在 System.Windows.Forms.ProgressBar.\u SetInfo() 在 System.Windows.Forms.ProgressBar.set_Value() 在…读取()处的…ProcessStatus()处

生成/目标环境是:
Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE
。从线程写入ProgressBar时出现问题吗? 如果是这样,从线程更新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;
    ...

您应该调用
Control.BeginInvoke

您应该调用
Control.BeginInvoke

您需要使用
Invoke
对Gui线程中创建的控件进行更改


为了简化操作,请查看一些

,您需要使用
Invoke
对Gui线程中创建的控件进行更改


为了让生活更轻松,请查看一些

检查此问题。您应该检查安装System_SR_ENU_wm.CAB或类似的工具,以便在您的平台上获取错误消息。为了节省空间,它们通常不包括设备上的所有错误消息。this.Invoke((MethodInvoker)委托{someLabel.Text=newText;//在UI线程上运行});勾选这个问题,你应该考虑安装System_SR_ENU_wm.CAB或类似的东西,使你能够在你的平台上获取错误消息。为了节省空间,它们通常不包括设备上的所有错误消息。this.Invoke((MethodInvoker)委托{someLabel.Text=newText;//在UI线程上运行});