搜索委托操作UI
跟多少没关系,只要是非UI线程对UI操作都会报错
解决办法就是将操作委托给UI线程去执行

解决方案 »

  1.   

    额,基本不是这个问题,虽然你非线程操作UI是有安全原因但是你目前的报错信息OutOfMemoryException,内存溢出错,估计还是无限循环了额ls红孩儿咋到处有你,但是每次回答滴时候,能不能好好看题目在回答啊
      

  2.   

    MyClass.ThreadUI.SetTxt(TXTValue1, "-" + num.ToString(), this); 
    这是交给了一个新的线程处理UI问题?
    线程一直在开启,没有终止,导致内存不足?
      

  3.   

    非UI线程是一直执行
    如果thread2与UI线程这样操作基本上没异常,多个thread对一个UI,异常出现的还是多的,有时候系统莫名其妙闪退
      

  4.   

    UI线程(主线程) invoke 你的所有非UI线呈(写一个轮训),这样应该不会错了
      

  5.   

    附上UI线程  /// <summary>
            /// 委托更改文本
            /// </summary>
            /// <param name="objCtrl"></param>
            /// <param name="text"></param>
            /// <param name="winf"></param>
            delegate void SetTextUI(System.Windows.Forms.Control objCtrl, string text, Form winf);考虑
      

  6.   

    非UI线程是一直执行
    如果thread2与UI线程这样操作基本上没异常,多个thread对一个UI,异常出现的还是多的,有时候系统莫名其妙闪退除了主线程(也有人叫 UI 线程)之外,任何线程都不可以访问  UI 上面的东西,否则会有一定概率出错。这是 windows 的 消息泵机制决定的。如果后台线程希望更新主线程,可以使用 control.Invoke or control.BeginInvoke 来实现。
      

  7.   


    UI线程也做了处理,代码如下   public static void SetText<TObject>(TObject objCtrl, string text, Form winf) where TObject : System.Windows.Forms.Control
            {
                if (objCtrl.InvokeRequired)
                {
                    SetTextUI d = new SetTextUI(SetText);
                    if (winf.IsDisposed)
                    {
                        return;
                    }
                    winf.Invoke(d, new object[] { objCtrl, text, winf });
                }
                else
                {
                    objCtrl.Text = text;
                }
            }
      

  8.   


    你的代码粗略看上去没有问题,但是感觉非常复杂,如果能够简化就好。
    MSDN 上面有个例子,看能不能对你有帮助:How to: Make Thread-Safe Calls to Windows Forms Controls