2012-01-19 54 views
0

继我以前的帖子亚姆努力使这项工作在任务栏中显示进度条我做错了什么?

我有以下代码(编辑):

public partial class Form1 : Form 
{ 
    ... 
    private TaskDialog Taskbar = new TaskDialog(); 
} 

private void timer1_Tick(object sender, EventArgs e) 
    { 
     Taskbar.ProgressBar.Value = progressBar1.Value; 
    } 

private void button2_Click(object sender, EventArgs e) 
    { 
     bgWorker.RunWorkerAsync(); 
    } 

bgWorker_dowork() 
{ 
    timer1.Enabled = true; 
     timer1.Start(); 

     while(progressBar1.Value < progressBar1.Maximum) 
     { 
     progressBar1.Value++; 
     } 
    } 

我到底做错了什么?

编辑:我不能让它显示进度,同时在任务栏上最小化,althought我没有建议改变..

+0

问题是什么? – Strillo

回答

3

那是因为您阻止您的GUI线程

while(true) 
    { 
    progressBar1.Value++; 
    } 

这将导致它会锁定并阻止它更新UI。

千万不要在你的主线程上运行这样的循环,使用BackGroundWorker这样的东西。

0

确保进度栏的值不应超过最大值。

ProgressBar.Maximum Property

ProgressBar.Minimum Property

while (progressBar1.Value < progressBar1.Maximum) 
{ 
     progressBar1.Value++; 
     Application.DoEvents();//This will update the UI paintings 
           //which is not happening prior to this code.  
} 
+2

我不想downvote你的答案,但请更正'while'部分,因为是错误的... – Marco

+0

感谢您分享知识。再次感谢。我希望这会对未来有所帮助。 – Pankaj

+0

虽然我按照指示进行了更改,但我没有任何更改。 – sparky