2017-01-31 3 views
1

BackgroundworkerのIF文でコンボボックスの値を取得しようとしたときに問題があります。私はこのコードを実行しようとBackgroundworkerのcomboBoxの値を取得しようとしたときに "クロススレッド操作が有効でない"例外が発生しました

if (KondisiSaldo.SelectedItem == "Kurang dari...") 
{ 
    view.RowFilter = string.Format("[Saldo] < '{0}'", thresholdcas); 
    view2.RowFilter = string.Format("[Saldo] > '{0}'", thresholdcas); 


    this.Invoke(new MethodInvoker(delegate 
    { 
    ViewDataSaldoGV.DataSource = view; 
    SaldoUnscheduleGV.DataSource = view2; 
    })); 
} 

エラーは有効ではありません

クロススレッド操作を言う:コントロール「KondisiSaldoは」 、それが作成されたスレッド以外のスレッドからアクセス。

誰でも手伝ってもらえますか?

+2

はい、初期化されたプロパティの中にフォームの値を格納し、その値をbackgroundworkerの内部から呼び出すか、またはパラメータとして渡す必要があります。 – Edward

+2

[クロススレッド操作が無効である可能性があります:作成されたスレッド以外のスレッドからアクセスされたコントロール](http://stackoverflow.com/questions/142003/cross-thread-operation-not-valid-control - スレッドより - その他よりアクセス) – Martheen

答えて

4

GUI以外のスレッドでKondisiSaldoにアクセスしています。 viewview2のコントロールを使って、KondisiSaldoをInvokeブロックに入れてGUIスレッドにアクセスさせます。

this.Invoke(new MethodInvoker(delegate 
{ 
    if (KondisiSaldo.SelectedItem == "Kurang dari...") 
    { 
     view.RowFilter = string.Format("[Saldo] < '{0}'", thresholdcas); 
     view2.RowFilter = string.Format("[Saldo] > '{0}'", thresholdcas); 

     ViewDataSaldoGV.DataSource = view; 
     SaldoUnscheduleGV.DataSource = view2; 
    } 
})); 

状況を調整する必要がある場合があります。

関連する問題