2012-02-09 56 views
0

我使用VS 2010製作了Windows窗體應用程序。我已將ProgressBar添加到我的表單中,並且更改了它的值。但是,ProgressBar不會前進或更改。我認爲其中一個原因是因爲這個過程太快,但是我做得很慢,也沒有效果。如何讓我的ProgressBar工作?

下面的代碼:

void pn_TenPercentProgressEvent(object sender, PrimeNumberEventArgs e) 
{ 
    probarPrimeNumber.Visible = true; 
    probarPrimeNumber.Value = (int)e.Percent * 100; 
    this.Refresh(); 
} 

這是事件發生類:

public ulong[] Generate(int count) 
    { 
     ulong[] ulngaryResult = new ulong[count]; 
     switch (count) 
     { 
      case 0: 
       { 
        throw new Exception("The Zero is NOT Permitted."); 
       } 
      case 1: 
       { 
        ulngaryResult[0] = 2; 
        break; 
       } 
      case 2: 
       { 
        ulngaryResult[1] = 3; 
        goto case 1; 
       } 
      default: 
       { 
        int intIndex = 0; 
        double dblPercent = 0.1; 
        for (ulong i = 2; i < ulong.MaxValue; i++) 
        { 
         if (this.IsPrime(i)) 
         { 
          ulngaryResult[intIndex] = i; 
          intIndex++; 
         } 
         if (intIndex == (int)(dblPercent * count)) 
         { 
          //Raise TenPercentProgressEvent 
          if (TenPercentProgressEvent != null) //Optional Event 
          { 
           TenPercentProgressEvent((object)this, new PrimeNumberEventArgs(intIndex, count, dblPercent)); 
          } 
          dblPercent += 0.1; 

         } 
         if (intIndex == count) 
         { 
          //Raise FinishedProgressEvent 
          if (FinishedProgressEvent != null) //Optional Event 
          { 
           FinishedProgressEvent((object)this, new PrimeNumberEventArgs(intIndex, count, dblPercent)); 
          } 

          break; 
         } 
        } 
        break; 
       } 
     } 
     return ulngaryResult; 
    } 
+0

您是否正在運行在其自己的線程上具有相應進度的操作? – 2012-02-09 22:57:25

+2

請發佈您的代碼。如果我們看不到你有什麼代碼,我們就無法弄清楚什麼是錯的。 – ChrisF 2012-02-09 22:57:48

+2

你在UI線程中運行代碼嗎?雖然UI線程繁忙,但如果沒有'Application.DoEvents()'(可怕的想法),它將無法更新。無論如何,請發佈您的代碼。 – Ryan 2012-02-09 23:01:00

回答

5

嘗試(int)(e.Percent * 100)。實際情況是,在將所有時間乘以100輪之前,將其轉換爲int,然後轉換爲0或100%,但絕不會介於兩者之間。

+0

非常感謝你 它的工作。 – 2012-02-09 23:12:41