关于多线程的问题,急!!!谢谢各位大哥了
系统出错,提示如下:
线程间操作无效:从不是创建控件"m_TypecomboBox"的线程访问它。
这种问题一般怎么解决,都有什么方法?
问题点数:20、回复次数:4Top
1 楼winner2050(winner)回复于 2006-11-02 11:35:33 得分 0
多加个委托
private void ThreadCreatTree() //通过委托处理
{
MethodInvoker In = new MethodInvoker(this.CreatTree);
this.BeginInvoke(In);
}
线程调用委托,委托调用其他Top
2 楼alvachien(白衣战神,四大绝技:C#/C++/T-SQL/ABAP)回复于 2006-11-02 12:47:27 得分 0
在创建的线程里面包装一个访问Combobox的函数。
然后在调用的线程用MethodInvoker来调用...Top
3 楼liujia_0421(SnowLover)回复于 2006-11-02 13:32:14 得分 0
vs2005出于安全考虑,不容许这样的操作,即线程间相互调用,你在线程间更新界面的操作就触犯了这一点,解决的办法有以下两个:
第一:在构造函数中加上这样一句话即可:
CheckForIllegalCrossThreadCalls = false;
加上这句话后,线程的处理就同vs2003完全一样了,即允许线程间相互调用
第二:利用委托代理来实现:
举个很简单的例子,比如我想在线程中对窗体中的textbox进行更新,可以这样来实现,如下:
//定义一个代理
public delegate void MyInvoke(string str);
//更新界面的方法
private void UpdateTextBox(string str)
{
textBox1.Text +=str;
}
//在线程回调函数里需要更新界面的地方,这样操作:
.....
MyInvoke mi = new MyInvoke(UpdateTextBox);
this.BeginInvoke(mi, new object[] { "i" });
.....
楼主可以试下,也可以上网再查下资料...
Top
4 楼zhzuo(秋枫)回复于 2006-11-03 13:59:31 得分 0
为Windows应用创建简单的异步调用模式
http://www.microsoft.com/china/MSDN/library/architecture/AsynCallPattern.mspxTop




