c# 多线程的问题

来源:百度知道 编辑:UC知道 时间:2024/05/29 13:48:21
private Thread td;
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
label4.Text = "";
label4.Update();
button1.Enabled = false ;
button2.Enabled = false ;
groupBox1.Text = "程序正在运行……";
//groupBox1.Update();
groupBox1.Refresh();
td = new Thread(new ThreadStart(progprocess));
td.Start();
this.button1.Enabled = true;
this.button2.Enabled = true;
groupBox1.Text = "程序运行结束!";

}

private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
private void progprocess()
{
for (int i = 1; i <= 1

不是在调试模式下使用时,是不会提示错误的,但是这不是线程安全的,你当然可以用锁的方式来保证安全,但是不推荐。
推荐用delegate来ui代理调用,这样是安全的。
______________________________
具体就是
声明原型
delegate void Worker();
void Work();
定义
Worker worker=new Worker(form1.Work);
使用
worker.Invoke(params);
____________________________

最近很多人问多线程的问题,
http://zhidao.baidu.com/question/79980016.html
http://zhidao.baidu.com/question/80234484.html
中有我为这类相关问题写的例子.敬请参考.

td = new Thread(new ThreadStart(progprocess));
td.Start();
这个线程不是UI线程自然不能更改UI的东西了。
你的Invoke一下UI线程来操作。

在.NET中,为了线程调用安全,其他线程是不能访问UI线程中的控件的
需要写一个委托,回挂到UI线程中去

//要使用Invoke必须要传递一个委托 所以 先定义一个委托
private delegate void UIInvokeHandler (int i);
private void button1_Click(object send