2012-01-19 53 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