悬赏分:50 浏览:379 次
private void btnSearch_Click(object sender, EventArgs e)
{
this.progressBar1.Maximum = 9000;
progressBar1.Minimum = 0;
progressBar1.MarqueeAnimationSpeed = 1000;
Thread tt = new Thread(new ThreadStart(LongProcess));
tt.Start();
tt.Join();
} private void LongProcess()
{
for (int i = 0; i < 9000; i++)
{if (InvokeRequired)
{
BeginInvoke(new UpProgressDelegate(LongProcess));
return;
}
this.progressBar1.Value = i; }
}
进度条在运行时,其它窗体控件不能使用...只能等到进度条运行完后,才能使用,我这里开线程了,还有就是我回到UI所在线程修改控件是不是造成卡死的原因啊,请高手指点啊,并给出好的意见,最好给个小例子!可以追加分数!
|
我也遇到这个情况,整个白屏。关注中。 下面是典型的多线程操作界面的例子,我按照你的要求改了,已经测试过, 界面不会卡住 private void buttonSearch_Click(object sender, EventArgs e) { this.progressBar1.Maximum = 9000; progressBar1.Minimum = 0; progressBar1.MarqueeAnimationSpeed = 1000; Thread tt = new Thread(new ThreadStart(LongProcess)); tt.IsBackground = true; tt.Start(); } delegate void UpProgressDelegate(int value); void ProgressIncrease(int value) { this.progressBar1.Value = value; } void LongProcess() { for (int i = 0; i < 9000; i++) { //Do something Thread.Sleep(10); //在这里做一些需要在线程中做的长时间操作,这里用休眠10ms来模拟。 //Porogress Increase if (progressBar1.InvokeRequired) { progressBar1.Invoke(new UpProgressDelegate(ProgressIncrease), new object[] { i }); } else { ProgressIncrease(i); } } } |
|
3个月前 体育皇帝 : ProgressBar.CheckForIllegalCrossThreadCalls = false; 控件没有这个属性啊,去掉join(),也不好使! 另外,这个是winform,不能从不是创建控件“progressBar1”的线程访问它 |
|
3个月前 侯垒 : ProgressBar有这个属性.自己在代码里写就行了. 我写的是ProgressBar而不是this.progressBar1 你可以再试一下. |
|
3个月前 体育皇帝 : 你这个方法是不捕获对错误线程的调用,简单的小程序用用可以,如果比较复杂的程序用的话,是不是有什么隐患啊? |