2012-05-04 7 views
1

私はBackgroundWorkerDoWorkイベント内でフォームコントロールをアクセスも、それは日付ピッカーから値を読み取りなくのTextBoxまたはコンボボックスからエラーBackgroundWorkerのDoWorkイベント内のComboBoxの値を読み取る

エラー:

Cross-thread operation not valid: Control 'cmbProgram' accessed from a thread other than the thread it was created on. 

enter image description here

コード:それは(別のスレッドで)DataPickerから値を読み取るどのよう

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
    { 
     string strDate = dtpDate.Value.ToString(); 

     string strProgram = cmbProgram.Text; 

    } 

フォームコントロールにアクセスするための回避策はありますか?BackgroundWorkerDoWorkイベント?

答えて

2

用途:

Dispatcher.Invoke(new Action(() => 
      { 
       string strDate = dtpDate.Value.ToString(); 
       string strProgram = cmbProgram.Text; 

      })); 
2

異なるアクセス権からコントロールにアクセスすることはできません。 この問題を回避する一般的な方法は、UIスレッドから現在の値を読み取り、その値を2番目のスレッド(またはBackgroundWorker)に渡すことです。

コントロールクラスのCheckForIllegalCrossThreadCallsをfalseに設定することで、チェックを無効にすることはできますが、これを行わないことをお勧めします。

1

あなたが引数として渡すことができます。たとえば、次のように

backgroundworker1.RunWorkerAsync(comboBox1.SelectedItem.ToString()); 

そして

string Item = e.Argument.ToString(); 
doWorkで内容をつかみます
関連する問題