2009-08-06 4 views
2

私はフォーム(UIスレッド)と背景作業スレッドを持っています。私は、メインのUIスレッドのラジオボタンがチェックされているかどうか、つまり、backgroundworkerスレッドの中にあるかどうかをチェックしようとしています。バックグラウンドワーカーのdoworkイベントの中にあるifステートメント内のboolタイプを比較するにはどうすればいいですか?C#:別のスレッドのif文の型を返す関数をどのように呼び出すのですか?

注:私はWPFを使用しています。

private void backgroundworker_DoWork(object sender, DoWorkEventArgs e) 
    {  
     if() // if (rdbCreditCard.Checked == true) {} etc. etc. 
     { 

     } 
    } 
+0

あなたはwinformsまたはwpfを使用していますか? – jle

+0

arugmentをまだ使用していない場合は、RunWorkerAsync(rdbCreditCard.Checked)でチェック状態を渡し、if((bool)e.Arugment){do work} – PostMan

答えて

3

バックグラウンドスレッドからチェックボックスにアクセスしないことを検討したい場合があります。そうすることで、いくつかのコンテキストスイッチと、ディスパッチャまたはデリゲートによるリクエストのシリアライズが必要になります。

代わりに、UIスレッドで実行されるチェックボックスにイベントハンドラを追加し、ワーカースレッドが使用するチェックボックスの状態を記録できます。ワーカーの起動時にチェックボックスの状態だけが必要な場合は、イベントハンドラと状態を避けてUIスレッドからスレッドパラメータとして渡すことができます。

2

WPFを使用している場合は、UIスレッドのディスパッチャを使用して、UIスレッドでメソッドを呼び出します。 winformsを使用している場合は、メソッドを実行するためにuiスレッドのデリゲートを作成します。