是否是在线程类中用委托?参数该如何传递呢?
Form1 form1 = new Form1();
System.Windows.Forms.Control.Invoke(new delegate_fail_additem(form1.add_fail_item),new object[]{columns});
这个是我在线程类中用的委托,不过出错了
非静态的字段、方法或属性“System.Windows.Forms.Control.Invoke(System.Delegate, object[])”要求对象引用
请大家帮忙。我也不知道我这样做是否正确。

解决方案 »

  1.   

    void StartWork() 假设些函数是工作在主线程以外的线程上
    //定义startwork工作完成后的委托
    protected delegate void Complete( bool IsError );
    void StartWork()
    {
        Complete complete = new Complete( CallComplete );
        Invoke( complete,new object[]{ IsError } );
    }
    在回调函数CallComplete 中可以检查是否工作在主线程上了
    private void CallComplete( bool IsError )
    {
    if( this.InvokeRequired == false )
    {
    //主线程
    //在这里更新控件
    }
    else
    {
    //其它线程(回调自己)
    Complete complete = new Complete( CallComplete );
    Invoke( complete,new object[]{ IsError } );
    }
    }
      

  2.   

    Invoke 是ISynchronizeInvoke接口中定义的方法 实现ISynchronizeInvoke 的类只有Control,所以Invoke的使用 必须在Control类或派生类中
      

  3.   

    参看
    http://blog.csdn.net/knight94/archive/2006/03/16/626584.aspx
      

  4.   

    System.Windows.Forms.Control
    这个是类啊。 兄弟,这个的Invoke不能使用。编译环境说得很明白
    你需要一个实例化得control来调用Invoke方法。
    上面black兄弟得方法很好, 你可以借鉴使用, 不过你得用实例化了的control
    比如
    this.txtBox1.Invoke()等等才可以。