2017-01-31 1 views
1

Ich habe ein Problem beim Versuch, Wert von Combobox in IF-Anweisung in Backgroundworker zu erhalten. Wenn ich versuche, diesen Code"Cross-Thread-Vorgang ist nicht gültig" Ausnahme beim Versuch, Wert von ComboBox in Backgroundworker zu erhalten

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; 
    })); 
} 

Der Fehler sagt

Cross-Thread-Betrieb nicht gültig auszuführen: Control 'KondisiSaldo' von ein anderen Thread als dem Thread auf erstellt wurde abgerufen.

Kann mir jemand helfen?

+2

Ja, Sie müssen den Wert aus dem Formular innerhalb einer initiierten Eigenschaft speichern, und dann können Sie den Wert innerhalb des Hintergrundarbeiters aufrufen oder als Parameter übergeben. – Edward

+2

Mögliches Duplikat von [Kreuzthread-Operation nicht gültig: Steuerelement, auf das von einem anderen Thread als dem Thread zugegriffen wird, auf dem es erstellt wurde] (http://stackoverflow.com/questions/142003/cross-thread-operation-not-valid-control von einem Thread-anders-als-The-accessed – Martheen

Antwort

4

Sie greifen auf KondisiSaldo in nicht GUI Thread zu. Setzen Sie die KondisiSaldo in Invoke-Block, um auf GUI-Thread zugreifen, wie Sie mit view und view2 Kontrollen.

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; 
    } 
})); 

Sie müssen möglicherweise die Bedingung anpassen, die Sie haben.

Verwandte Themen