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#新手.....
{
Thread thread1 = new Thread(new ThreadStart(look));
thread1.Start();
}
public void look()
{ textBox1.Text += "i";
}
----------------------------------------------------------------------
运行成功了,但是在按下button1的时候却提示:线程间操作无效,然后就只有强行退出了...这个问题该怎么解决啊?
我是刚学了1小时的C#新手.....
解决方案 »
- foreach循环的问题
- 这样的泛型类该怎么定义?
- C#里面参数是对象用REF是什么意思?
- socket!!
- 请问 我怎么样把进度条设置成竖直显示(刻度从下往上)
- 测试你C#的开发能力!!!!!
- 用CUTFTP上传的一个问题
- 实例化的对象数组可访问性低,放分求高手赶紧来抢救!
- 如何获取在DataGrid中选定的列在DataTable中的位置(index).
- 如何实现象C#那样的界面,如单击工具栏中的一项,使主界面的内容发生改变,怎样设置Form之间的关系呢?
- C#中在循环里如何生成多个lable组件????
- Windows Form 如何实现边角为圆形,或者说象媒体播放器(Power DVD)那样有些地方是透明的呢
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);
}
即可
这样改一下即可://定义一个代理
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" });
}我测试过,楼主不妨试一试...
CheckForIllegalCrossThreadCalls = false;
加上这句话后,线程的处理就同vs2003完全一样了,即允许线程间相互调用,但是建议为安全性考虑,还是不要这样做为妙...
但是我到现在还没看明白这段代码到底是怎么回事...
在某处看到delegate=委托=函数指针=引用,引用也可以像public delegate void MyInvoke(string str);这么用啊........