Winforms 跨线程操作无效:从创建控件的线程以外的线程访问控件

Winforms 跨线程操作无效:从创建控件的线程以外的线程访问控件,winforms,Winforms,我得到以下错误 跨线程操作无效: 从其他线程访问的控件 而不是创建它的线程 这是来自wcf的回调 我有一个文本框,我需要更新该值并向其添加文本。 此值将从另一个线程返回并更新UI public CarStatus CarState { get { return _carState; } set { _carState;= value;

我得到以下错误

跨线程操作无效: 从其他线程访问的控件 而不是创建它的线程

这是来自wcf的回调

我有一个文本框,我需要更新该值并向其添加文本。 此值将从另一个线程返回并更新UI

     public CarStatus CarState
    {
        get
        {
            return _carState;
        }
        set
        {
            _carState;= value;

            CarStatus tmpCarState;=null;
            if (txtResult.InvokeRequired)
            {
                txtResult.Invoke(new MethodInvoker(() => { tmpCarState;=null;= _carState;}));
            }
            txtResult.AppendText(string.Format("Car status is: {0}{1}", tmpCarState, Environment.NewLine));


        }

下面的崩溃

您忘记了
else
,因为您总是通过
AppendText
更新控件的文本,而不仅仅是在不需要调用时


而且,我认为您在这里有些错误:您通过调用程序设置成员变量,但在任何线程上更改实际的WinForm组件?您可能只是想在Invoke上删除整个块。

谢谢您的回复。它的工作原理类似于BeginInvoke(newmethodinvoker(()=>txtCarState.AppendText(_carState));这就是你的意思吗?