一个线程的进展怎么通过一个progressbar来动态显示反应它
一个线程的进展如何通过一个progressbar来动态显示反应它。
一个线程在进行数据处理。。有2000个点需要计算,这需要一段时间,,现在 想通过添加一个progressbar进度条 实时显示它的进程。 期间 解决不了这几个问题。。1. 每次计算出一个点 就对progressbar作图,想当然觉得计算完2000个点,进度条汇成100%。 但是效果不行,非常容易假死。 2。进度条显示我加了一个线程。每次计算出一个点 开始线程的progressbar作图,效果是发现原本挺快的就能画好图,现在反应的很慢。有很大的延迟 感觉。
简短代码如下:
private void button1(object sender, EventArgs e)
{
t = new Thread(new ThreadStart(GetCCDData));
t.Start();
}
private void GetCCDData()
{
for (int i = 0; i < 2000; i++)
{
DataList[i].Y = DataList[i].Y - BackgrndData[i].Y;
SetTextMessage(100 * i / 1999);
}
........
}
public void SetTextMessage(int pos)
{
if (this.InvokeRequired)
{
SetPos setpos = new SetPos(SetTextMessage);
this.Invoke(setpos, new object[] { pos });
}
else
{
this.label10.Text = pos.ToString()+"%";
this.progressBar1.Value = pos;
}
}
------解决方案--------------------
http://download.csdn.net/detail/caozhy/4832657
------解决方案--------------------
不要使用 Invoke,应该使用 BeginInvoke。
基本上,只是偶尔可能有使用 Invoke 的机会。都应该改为使用 BeginInvoke。
一个线程在进行数据处理。。有2000个点需要计算,这需要一段时间,,现在 想通过添加一个progressbar进度条 实时显示它的进程。 期间 解决不了这几个问题。。1. 每次计算出一个点 就对progressbar作图,想当然觉得计算完2000个点,进度条汇成100%。 但是效果不行,非常容易假死。 2。进度条显示我加了一个线程。每次计算出一个点 开始线程的progressbar作图,效果是发现原本挺快的就能画好图,现在反应的很慢。有很大的延迟 感觉。
简短代码如下:
private void button1(object sender, EventArgs e)
{
t = new Thread(new ThreadStart(GetCCDData));
t.Start();
}
private void GetCCDData()
{
for (int i = 0; i < 2000; i++)
{
DataList[i].Y = DataList[i].Y - BackgrndData[i].Y;
SetTextMessage(100 * i / 1999);
}
........
}
public void SetTextMessage(int pos)
{
if (this.InvokeRequired)
{
SetPos setpos = new SetPos(SetTextMessage);
this.Invoke(setpos, new object[] { pos });
}
else
{
this.label10.Text = pos.ToString()+"%";
this.progressBar1.Value = pos;
}
}
------解决方案--------------------
http://download.csdn.net/detail/caozhy/4832657
------解决方案--------------------
不要使用 Invoke,应该使用 BeginInvoke。
基本上,只是偶尔可能有使用 Invoke 的机会。都应该改为使用 BeginInvoke。