if (this.InvokeRequired)
            {
                SetPos sps = new SetPos(SetTextMessage);
                this.Invoke(sps, new object[] {pos});
           
            }
            else
            {               
                this.lshowNum.Text = pos.ToString() + "/100";
                this.progressBar1.Value = Convert.ToInt32(pos);
            }
比如上面这段代码,我的理解是:属性InvokeRequired就是表示当前form的空间是否可以被当前线程所访问,如果是就直接访问,不过不是就用委托访问,可上面的代码为什么正好和我的理解相反呢,上面的好像是这样:如果InvokeRequired为true就用委托访问,如果InvokeRequired为false就直接访问。请高手帮我讲解一下。

解决方案 »

  1.   

    那你换过来试试要是和你理解的一样,那就说明你理解错了嘛,要是不行那就说明这样写不对,Msdn上应该能解决这个问题吧
      

  2.   

    InvokeRequired用于判断该段代码是否是在其他线程中委托调用的,如果为真,就需要在本线程中重新创建一个该委托的实例,并用Invoke方法调用它,让这段代码在本线程中调用。
      

  3.   

    楼主你刚好理解反了。
    invokerequired的意思获取是不是需要委托调用,如果为真,就需要,为假就不需要直接访问就行
      

  4.   

    你可能是想从线程内访问控件吧 比如给控件赋值 但是由于控件不是由你的线程创建的
    而是由主线程创建的 所以你的赋值不会成功为了给控件赋值 你需要通过代理 这就是你的控件的InvokeRequired为True了
      

  5.   

    InvokeRequired:获取一个值,该值指示调用方在对控件进行方法调用时是否必须调用 Invoke 方法,因为调用方位于创建控件所在的线程以外的线程中。楼主你理解反了
      

  6.   

    InvokeRequired:是否需要调用;
    this.InvokeRequired:并不是任何时候都指代的form,而是你的UI部分的控件,调用的控件