2012-03-16 14 views
0

リストボックス内のすべてのファイルを実行するWinformアプリケーションがあります。 Pcapdotnet DLLを使用してネットワークアダプターにパケットを送信しています。プロセスはWiresharkキャプチャファイルこのファイルですべてのパケットを送信します。 各ファイルはBackgroundWorkerで実行され、次にリストボックスのsrartなどで実行されます。 チェックボックスを追加し、このチェックボックスをオンにすると、すべてのファイルが同時に実行されます。 それはエラーで自分のアプリケーションのクラッシュを実行している:例外に呼び出しのターゲットによってスローされました:エラーでアプリケーションがクラッシュする例外がターゲットによってスローされました

static void Main() 
{ 
    Adapters addr = new Adapters(); 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    Application.Run(new mainWindow()); 
} 

エラーが最後の行で受信し、

(Application.Run(新しいメインウィンドウ()))

これは同時実行に扱う私のコードです:

 for (int i = 0; i < listBoxFiles.Items.Count; i++) 
     { 
      string filePath = (string)listBoxFiles.Items[i]; 
      playCount = 0; 

      BackgroundWorker bgWsim = new BackgroundWorker(); 
      bgWsim.WorkerReportsProgress = true; 
      bgWsim.ProgressChanged += new ProgressChangedEventHandler(bgW_ProgressChanged); 
      bgWsim.DoWork += new DoWorkEventHandler(
      (s3, e3) => 
      { 
       while ((playCount < numberOfLoops) && (bContinuePlay)) //play the capture 
       { 
        for (int k = 0; (k < listBoxFiles.Items.Count) && (bContinuePlay); k++) 
        { 
         class = new myClass(filePath , playSpeed); 

         class.evePacketProgress += new class.dlgPacketProgress(
          (progressCount) => 
          { 
           bgWsim.ReportProgress(progressCount, class); 
          }); 

         if (selectedAdapter != null) 
         { 
          bContinuePlay = class.playCapture(selectedAdapter._packetDevice); 
         } 

         playCount++; 
         Thread.Sleep((int)delay); 
        } 
       } 
      }); 

      bgWsim.RunWorkerCompleted += new RunWorkerCompletedEventHandler(
      (s3, e3) => 
      { 
       groupBoxSelect.Enabled = true; 
       groupBoxOptions.Enabled = true; 
       groupBoxInfo.Enabled = true; 
       btnPlay.Enabled = true; 
      } 
      ); 

      bgWsim.RunWorkerAsync(); 
     } 

は、どのように私はこのエラーをデバッグして問題を見つけることができますか?

エラースクリーンショット:

http://i42.tinypic.com/2ainbqp.jpg

+1

をあなたはF5キーを押すと、ブレークポイントを使用することで、このエラーをデバッグすることができます。 –

+0

例外はどこで手に入りますか? winformsコントロールのmulithreading問題のようです。 – munissor

+0

私の更新を見てください。コードが追加されました – user1269592

答えて

0

ProgressBar(0から100まで不履行)、それが受け入れる値の範囲を定義するために使用されるMaximumMinumum特性を有します。 Valueプロパティを範囲外の数値に設定しようとすると、ArgumentExceptionがスローされます。 hereを参照してください。

+0

私のProgressBarは私の問題ですか? – user1269592

+0

渡す値です。あなたの 'bgW_ProgressChanged'メソッド(これは' ProgressChangedEventHandler'と定義しています)でこれをやっていると思います。 1つのアプローチは、あなたの 'progressCount'変数を百分率で表現することです(0-100の範囲の数値になります)。代わりに' bgWsim.ReportProgress() 'に渡します。 – raveturned

+0

スタックトレースの開始位置を 'System.Windows.Forms.progressBar.set_Value(Int32 value)'で確認してください。例外メッセージに 'Value of' 101 'が' Value 'に無効です。 'Value'は 'minimum'と 'maximum'の間にある必要があります。 – raveturned

0

私は、非同期スレッドによって呼び出されて以来、問題がRunWorkerCompletedイベントだと考えています。独自のスレッドでWindowsフォームからコントロールを編集する必要があります。

例:(ラムダ付き)

 private static void runOnThread(Control x, Action logic) 
    { 
     if (x.InvokeRequired) 
     { 
      x.Invoke(logic); 
     } 
     else 
     { 
      logic(); 
     } 
    } 

follwedとしてあなたはこれを呼び出します。

runOnThread(groupBoxSelect,() => groupBoxSelect.Enabled = true); 
関連する問題