2017-03-26 16 views
-1

C#でBackgroundWorkerの問題に直面しています。お役に立てば幸いです。 はここC#BackgroundWorker inside BackgroundWorker

 var bwBIG = new BackgroundWorker(); 
     bwBIG.DoWork += (_senderBIG, argsBIG) => 
     { 
      var bw = new BackgroundWorker(); 
      String requestResult = ""; 
      bw.DoWork += (_sender, args) => 
      { 
       requestResult = tempHelper.GetData(); 
      }; 
      bw.RunWorkerCompleted += (_sender, args) => 
      { 
       makeData(requestResult); 
      }; 
      bw.RunWorkerAsync(); 
     }; //bwBIG.DoWork 
     bwBIG.RunWorkerCompleted += (_senderBIG, argsBIG) => 
     { 
      prepareData(rtbData.Text); 
      MessageBox.Show("Data OK"); 
     }; 
     bwBIG.RunWorkerAsync(); 

それは「その後、MessageBox.Show(tempHelper.GetData()を実行すると仮定して、makeData(requestResult)、その後、finnally prepareData(rtbData.Text)私のプログラム上のコードのいくつかの作品ですデータOK ")。 しかし、bwがまったく実行されていないようです。コードを実行するたびに、MessageBox.Show( "Data OK")に変わっただけです。 何か助けてください??? 読んでいただきありがとうございます。

+1

あなたの 'bwBIG.Dowork'には何も表示されていないので、何の時間も停止することはありません。あなたがやっていることは、別のバックグラウンドワーカーを設定し、非同期で実行するように指示することだけです。あなたは 'bw.DoWork'が終了するのを待っているようには見えないので、' bwBig'はとても素早く終了します。そして、なぜ私はバックグラウンドタスクを作成するのですか? – Chris

+1

すべてのbwBIGがセットアップされ、内部BWが起動します。すぐに終了し、RunWorkerCompletedを起動します。あなたがそこで何をしようとしているのか分かりません。 –

答えて

0

ワーカースレッド内でbackgroundworkerthreadを作成するのはちょっと役に立たない。

私はこの方法でそれを維持します:

var localCopy = rtbData.Text; 

var bwBIG = new BackgroundWorker(); 
bwBIG.DoWork += (_senderBIG, argsBIG) => 
{ 
    var requestResult = tempHelper.GetData(); 
    makeData(requestResult); 

    prepareData(localCopy); 

    MessageBox.Show("Data OK"); 
}; //bwBIG.DoWork 
bwBIG.RunWorkerAsync();   

それはデータの流れを見ることがちょっと難しいです。

+0

こんにちは、お返事ありがとうございます。ただし、prepareData(rtbData.Text)はvar requestResult = tempHelper.GetData()の後に実行する必要があります。完了しました。 tempHelper.GetData()は、未知の時間(2〜30秒)実行されています。 –