2010-04-06 64 views
3
public partial class Form1 : Form 
{ 
    //.... 
    private void timer1_Tick(object sender, EventArgs e) 
    { 
    if (this.progressBar1.Value >= 100) 
    { 
     this.timer1.Stop(); 
     this.timer1.Enabled = false; 
    } 
    else 
    { 
     this.progressBar1.Value += 10; 
     this.label1.Text = Convert.ToString(this.progressBar1.Value);     
    } 
    } 
    //...... 
} 

這裏我使用了一個計時器來更新進度欄值。它在XP中正常工作。但在Windows7或Vista中,當進度值設置爲100,但圖形進度不是100!C#進度條未在Vista或Windows7中準確更新

搜索某些線程發現它的動畫滯後於Vista/Windows7。

如何擺脫這個東西?

我不想使用鬆散VISTA/Window7的的外觀和感覺:

SetWindowTheme(progressBar1.Handle, " ", " "); 
+0

你在看什麼呢?它按預期對我工作... – 2010-04-06 06:33:51

+1

顯示進度= = 100%的標籤完成!但進度條似乎仍然是80%或90%。不是我們想要的,對吧? – Samir 2010-04-06 06:36:32

+0

我假設你在這裏使用Windows窗體(因爲你的代碼中沒有Dispatcher引用),我必須同意codeka,它在這裏的作用就像一個魅力... 我們將需要更多的細節 – TimothyP 2010-04-06 06:44:15

回答

0
public partial class Form1 : Form 
{ 
    //.... 
    private void timer1_Tick(object sender, EventArgs e) 
    { 
    if (this.progressBar1.Value >= 100) 
    { 
    this.timer1.Stop(); 
    this.timer1.Enabled = false; 
    } 
    else 
    { 
     int tempValue = this.progressBar1.Value + 10; 
     if (tempValue < 100 && tempValue >=0) 
     { 
     this.progressBar1.Value = tempValue + 1; 
     this.progressBar1.Value = tempValue; 
     } 
     else if (tempValue >= 100) 
     { 
     this.progressBar1.Value = 100; 
     this.progressBar1.Value = 99; 
     this.progressBar1.Value = 100; 
     } 
    this.label1.Text = Convert.ToString(this.progressBar1.Value);     
    } 
    } 

//...... 
} 

else部分使進度條看起來OK。但是應該有一些標準的進度條方式。這個想法來自Fozi的評論here

1

這僅僅是愚蠢的進度條在Vista和更高版本是如何工作的。

沒有修復。

向微軟投訴。

+0

爲什麼downvote? – leppie 2010-04-06 06:48:40

+1

我認爲他們downvoted你的意見既不有用,insightfull或尊重 如果確實有這樣的錯誤,devs @ microsoft可能會幫助,如果你新的誰聯繫。我只是在Windows 7作品上測試了這個,就像一個魅力 – TimothyP 2010-04-06 07:08:58

+0

@TimothyP - 沒有滯後......即進度條更新落後於實時。如果值更新緩慢,那麼它很好,但如果值更新得很快,那麼吧就會落後。 – timfoden 2014-01-31 12:07:48

2

我有同樣的問題。 Fozi的tipps正在幫助我。薩米爾的解決方案將工作正常,除非最大(100%)。爲了使這項工作也達到100%,以前必須增加最大值。以下工作適合我。

if (NewValue < progressBar.Maximum) 
{ 
    progressBar.Value = NewValue + 1; 
    progressBar.Value--; 
} 
else 
{ 
    progressBar.Maximum++; 
    progressBar.Value = progressBar.Maximum; 
    progressBar.Value--; 
    progressBar.Maximum--; 
} 
1
private void timer1_Tick(object sender, EventArgs e) 
    { 

     if (progressBar1.Maximum == 1) progressBar1.Maximum = 100; 
     if (progressBar1.Value==100) { 
      progressBar1.Value = 0; 
      return; 
     } 
     progressBar1.Increment(1); 
     if (progressBar1.Value == 100) { 
      progressBar1.Value = 1; progressBar1.Maximum = 1; 
      progressBar1.Update(); 
     } 
    } 

這些都是我的技巧與進度的適當滿刻度的油漆,以解決win7的問題。