【问题标题】:Cross-thread operation not valid: Control accessed from a thread other than the thread it was created on跨线程操作无效:控件从创建它的线程以外的线程访问
【发布时间】:2011-01-15 07:33:10
【问题描述】:

我收到以下错误

跨线程操作无效: 从其他线程访问的控件 比创建它的线程。

这是来自 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));


        }

以下崩溃!!

【问题讨论】:

    标签: winforms


    【解决方案1】:

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

    而且,好吧,我认为您这里有问题:您正在通过调用程序设置成员变量,但是在任何线程上更改了实际的 WinForm 组件?您可能只想在 Invoke 上执行整个代码块。

    【讨论】:

    • 感谢您的回复。它有点像这样 BeginInvoke(new MethodInvoker(() =>txtCarState.AppendText(_carState)); 是你的意思吗?
    猜你喜欢
    • 2016-05-21
    • 2016-06-11
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多