现在在学习一个程序,里面个语句看不懂
this.textBox1.Invoke(new MyDelegate(this.InvokeFun));
这句话是什么意思??
Invoke()又是干什么用的?

解决方案 »

  1.   

    只有创建界面的线程可写修改界面,其他线程如果要修改界面需要调用Invoke
      

  2.   

    因为.net里面跨线程的访问处于安全性考虑要求很严格
    winform在多线程处理过程中,很多时候需要多线程操作或者运行,(这种情况大部分原因是为了不让用户界面失去响应),所以需要从一个非控件的创建线程去访问控件,控制控件
    如果你尝试在一个非控件的创建线程中对控件进行直接的操作那么你会得到一个异常...
    更详细的实例是进度条类示例,如何在读取大型文件的时候又不让用户界面失去响应:子线程读取文件然后用delegate去推送数据到主线程控制进度条的显示
    也有非安全的方法直接设置属性允许控件被跨线程调用,但是非安全,有的winform控件会无故失去响应,标准的:
     void funShowBar(int i,string mesg)
            {
                if (this.InvokeRequired)
                {
                    dlgtShowBar dg = new dlgtShowBar(funShowBar);
                    this.Invoke(dg, new object[] { i ,mesg});
                }
                else
                {
                    if (i < progressBar1.Maximum)
                    {
                        progressBar1.Visible = true;
                        label2.Visible = true;
                        this.progressBar1.Value = i;
                        label2.Text = mesg;
                    }
                    else
                    {
                        progressBar1.Visible = false;
                        label2.Visible = false;
                    }
                }
            }
      delegate void dlgtShowBar(int i,string mesg);