最近在做线程方面的程序,请问如何在两个线程间传递参数?就是我想把在一个线程中接受到的参数传递给另外一个线程,如何做,谢谢。现在遇到一个比较棘手的问题,就是我在另外一个线程中想弹出一个带有TreeView控件的窗体,当程序一运行到弹出窗体的地方的时候就会有异常,说是TreeView控件的DragDrop事件不能在另外一个线程中使用。请问各位高手如何解决?

解决方案 »

  1.   

    使用TreeView.Invoke 来执行你的操作
      

  2.   

    你遇到的问题是因为vs2005为安全考虑,不允许线程间相互调用,最好的办法就是用委托:
    举个例子,如果想在线程中更新一个Lable的Text:
    //定义一个委托
    public delegate void MyInvoke(string str);
    //更新界面的函数
    private void updateUI(string str)
    {
        this.Lable1.text=str;
    }
    //线程回调函数
    private void threadProc()
    {
         //其他操作
       //更新界面的操作
         string s="YouValue";
       MyInvoke mi=new MyInvoke(updateUI);
         this.BeginInvoke(mi,new object[]{s});
    }
      

  3.   

    谢谢liujia_0421() ,那线程中调用窗体也是一样的吗?
    请详细说明一下好吗?
      

  4.   

    在线程中如果涉及到对窗体的操作,比如更改属性值,或者隐藏等其他操作,vs2005是不能直接进行操作的...vs2003是可以的...