线程间操作无效

lengx7 2006-10-28 01:52:06
private void button1_Click(object sender, EventArgs e)
{
Thread thread1 = new Thread(new ThreadStart(look));
thread1.Start();


}
public void look()
{

textBox1.Text += "i";
}
----------------------------------------------------------------------
运行成功了,但是在按下button1的时候却提示:线程间操作无效,然后就只有强行退出了...

这个问题该怎么解决啊?
我是刚学了1小时的C#新手.....
...全文
186 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
liujia_0421 2006-10-28
  • 打赏
  • 举报
回复
这个要慢慢理解,我以前也是拿VC++/MFC做开发的,刚接触C#委托时,也很郁闷.建议楼主先找些相关的文章看一下吧....
lengx7 2006-10-28
  • 打赏
  • 举报
回复
2楼和4楼的方法都可以
但是我到现在还没看明白这段代码到底是怎么回事...
在某处看到delegate=委托=函数指针=引用,引用也可以像public delegate void MyInvoke(string str);这么用啊........
liujia_0421 2006-10-28
  • 打赏
  • 举报
回复
其实还有一个更加简单的方法可以解决这个问题,即在构造函数中加上这样一句话即可:
CheckForIllegalCrossThreadCalls = false;
加上这句话后,线程的处理就同vs2003完全一样了,即允许线程间相互调用,但是建议为安全性考虑,还是不要这样做为妙...
liujia_0421 2006-10-28
  • 打赏
  • 举报
回复
OK ?
liujia_0421 2006-10-28
  • 打赏
  • 举报
回复
vs2005出于安全考虑,不容许这样的操作,即线程间相互调用.
这样改一下即可:

//定义一个代理
public delegate void MyInvoke(string str);
//更新界面的方法
private void UpdateTextBox(string str)
{
textBox1.Text +=str;
}
//线程回调函数
public void look()
{
MyInvoke mi = new MyInvoke(UpdateTextBox);
this.BeginInvoke(mi, new object[] { "i" });
}

我测试过,楼主不妨试一试...
lengx7 2006-10-28
  • 打赏
  • 举报
回复
哇..........一点都看不明白...
学过点C++
还是麻烦楼上的朋友说明一下吧...
crazy_cool_boy 2006-10-28
  • 打赏
  • 举报
回复
需要写个委托
delegate void GetString(string i);
private void AddString(string i)
{
if(this.textBox1.InvokeRequired)
GetString d = new GetString(AddString);
this.Invoke(d,new object[]{i});
else
this.textBox1.Text += i;
}
  public void look()
{

AddString(i);
}
即可
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2006-10-28 01:52
社区公告

让您成为最强悍的C#开发者