2012-02-09 14 views
0

私はVS 2010でWindowsフォームアプリケーションを作成しています。ProgressBarをフォームに追加しました。その値を変更します。ただし、ProgressBarは前進または変更されません。私はその理由の1つがプロセスが速すぎるためだと思うが、私はそれを遅くしてしまい、どちらもうまくいかなかった。ここでどのように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

対応する進捗状況の操作は、独自のスレッドで実行していますか? –

+2

コードを投稿してください。あなたが持っているコードがわからないと、何が間違っているのか分かりません。 – ChrisF

+2

UIスレッドでコードを実行していますか? UIスレッドはビジー状態で、 'Application.DoEvents()'(ひどい考え方)がなければ更新できません。とにかく、あなたのコードを投稿してください。 – Ryan

答えて

5

(int)(e.Percent * 100)を試してみてください。そのままで、intにキャストして100ラウンドを0または1に掛けてから0%または100%のいずれかに変換しますが、その間は決して使用しません。

+0

ありがとうございます それは働いた。 –

関連する問題