public void getcontent(string content){
Monitor.Enter (this);
m_spiderForm.SetContent(content);
Monitor.Pulse(this);
Monitor.Exit(this);
}SetContent(string str)是窗口m_spiderForm下的方法:
public void SetContent(string content){
此处我可以获得getcontent传过来的content,但调用UI线程时老是无法执行savedata()方法保存.
//这里我要处理的就是调用savedata这个函数,利用多线程(注意:要求一定要利用多线程,因为要将content处理,需要一定的时间)将content保存到数据库,并绑定datagrid;在这里如何实现它呢?????请高手指点.谢谢
}
public void savedata(){
    ................
    datagrid.datasource = dt;
    ........
}

解决方案 »

  1.   

    希望能够列出代码.我用过invoke,begininvoke,callback,但均未实现.应该是我掌握得不够.
    请大家帮帮忙
      

  2.   

    public delegate void SetContentDelegate(string str)
    public void SetContent(string content)
    {
      if(this.invokerequired)
    {
    SetContentDelegate d=new SetContentDelegate(SetContent)
    this.invoke(d, new object[]{content});
    }
    else
    {
    //正常代码
    }
    }  
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) 最新版本:20070212http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
      

  3.   

    feiyun0112(http://feiyun0112.cnblogs.com/) 
    你的方法试过.达不到效果.
      

  4.   

    public void SetContent(string content){
       //在这里,我直接这样.居然不出错误
        txtbox.text = content;
    }
    但是我直接用savedata函数,就会出错,
    以前测试过feiyun0112(http://feiyun0112.cnblogs.com/)说的方法,无法把数据保存到数据库并绑定到datagrid,并在窗口更新datagrid.
    高手们,出来帮帮忙呀.在下不胜感激.
      

  5.   

    在某个线程上创建的控件不能成为在另一个线程上创建的控件的父级。这是我直接用savedata函数时报的错误.
    我又再次试着用你的方法,发现执行不了savedata函数(我刚刚下载了你的那个阅读器,看了下你的代码,你用上面那个方法只是简单显示一些信息,但我这个savedata函数:一方面要对传过来的值分析,分析完后,还要保存到数据库中,然后又要再次绑定datagrid,进而更新datagrid里面的数据.),执行到savedata函数时,好像线程就停止了,整个程序就这样结束了.奇怪,是不是:public void getcontent(string content){
    Monitor.Enter (this);
    m_spiderForm.SetContent(content);
    Monitor.Pulse(this);
    Monitor.Exit(this);
    }
    这里有什么问题呀?Monitor.Enter (this);...这些去掉后,又达不到要求了,我只允许只有一个线程进入并把相关数据取得.其它的线程在后面等.