0

私はコードでバックグラウンドワーカークラスを次のように使用しています

private void bwFilter_DoWork(object sender, DoWorkEventArgs e)
    {            
       //Some Code
    }
    private void bwFilter_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {          
       //Some code
    }

今、私はボタンクリックでこのイベントを呼び出しています

btnClick_Click(Object Sender,EventArgs e)
{
      bwFilter.RunWorkerAsync();       
} 

bwFilter_RunWorkerCompletedが完了した後でのみ、btnClickで何かを実行したいと思います。次のことを試しますが、デッドロック状態になります

 btnClick_Click(Object Sender,EventArgs e)
{
      bwFilter.RunWorkerAsync();
      While(bwFilter.IsBusy)
      {
          Continue;
      }   
     //Start coding Again Here    
} 
4

2 に答える 2

1

バックグラウンドワーカーが完了するのを待つことは、ワーカーを使用するポイントを完全に無効にします。そして必然的にデッドロックを引き起こします。

気にしないで、直接 bwFilter_DoWork() を呼び出してください。

于 2013-02-08T09:06:26.507 に答える
1

RunWorkerCompletedイベントを使用します。http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.runworkercompleted.aspxを参照してください。

bwFilter.RunWorkerCompleted += (s, e) => { ... do something ... };
bwFilter.RunWorkerAsynch();
于 2013-02-08T06:57:39.370 に答える