线程1 th1 用来更新窗体上一个label 的text
th1=new thread(new threadstart(UpdateLable));
主线程(窗体线程)
while(true)
{
th1.start();
while(!th1.IsAlive);
DO SOMETHING
}
void UpdateLabel()
{
while(true)
label1.Text=value1.tostring();
}但是窗体 上的Label1的text并没有更新,虽然value1在不断发生变化
th1=new thread(new threadstart(UpdateLable));
主线程(窗体线程)
while(true)
{
th1.start();
while(!th1.IsAlive);
DO SOMETHING
}
void UpdateLabel()
{
while(true)
label1.Text=value1.tostring();
}但是窗体 上的Label1的text并没有更新,虽然value1在不断发生变化
th1=new thread(new threadstart(UpdateLable));
主线程(窗体线程)
while(true)
{
th1.start();
while(!th1.IsAlive);
DO SOMETHING
}
void UpdateLabel()
{
while(true)
label1.Text=value1.tostring();
label1.Refresh(); //此处加个刷新
}
while(true)
{
th1.start();
while(!th1.IsAlive);
DO SOMETHING
}加了label1.Refresh(); //此处加个刷新
循环结束后,th1 才能开始得到执行,这是为什么?
{
while(true)
{
label1.Text=value1.tostring();
label1.Refresh(); //此处加个刷新
}
}修改一下解决。少一个括号。呵呵~~~
while(true)
{
allDone.Reset();
th1.start();
//while(!th1.IsAlive);
allDone.Wait(); // 挂起,等待子线程结束
DO SOMETHING
}void UpdateLabel()
{
while(true)
{
label1.Text=value1.tostring();
label1.Refresh(); //此处加个刷新
}
allDone.Set(); // 通知主线程继续运行
}
{
allDone.Set(); // 子线程开始,通知主线程继续运行
while(true)
{
label1.Text=value1.tostring();
label1.Refresh(); //此处加个刷新
}
}
我的需求是这样的
在窗体上有个label 它用来即时显示正在处理文本文件中的第 几条记录,
主线程main 函数读取 每次读取 文本一行并处理
如果我在 主线程(窗体线程)加一个MessageBox。show();
则 th1 就能得到执行
while(true)
{
th1.start();
while(!th1.IsAlive);
DO SOMETHING
MessageBox.show();// 后加德 不知道为什么?
}
子线程1循环体 -> 处理记录 -> 处理纪录结束,计数器加1 -> 下一条记录
循环结束 -> 通知子线程2处理结束 ->子线程2停止子线程2开始 -> 死循环,直到线程1结束
死循环 -> 读取计数器 -> 刷新Label -> 如果处理结束,则用break跳出循环,否则Thread.Sleep(25) -> 继续循环(这里25毫秒刷1次就可以了,不然系统速度狂降)
循环结束后 -> 最后一次读取计数器 -> 刷新Label -> 子线程2停止
我还是 用了这个private static ManualResetEvent 方法。
用了两个 ManualResetEvent对象,allDone, MR, allDone负责主线程,MR 负责 刷新Label 的线程。 在主线程里 控制 MR、 在刷新label线程里控制allDone,使两个线程交替执行。
谢谢你的竭力帮助