2012-05-03 59 views
0

我有一個後臺工作人員需要抓取comboBox1.SelectedItem,但它在不同的線程,因此我無法「觸及」GUI(因爲GUI在主線程上)。從背景工作檢索GUI數據

我該怎麼做?

我試過使用委託,但這似乎並不奏效。

private delegate string ReadComboDelegate(ComboBox c); 

private string ReadComboBox(ComboBox c) 
{ 
    if(c.InvokeRequired) 
    { 
     ReadComboDelegate del = new ReadComboDelegate(this.ReadComboBox); 
     return (string) c.Invoke(del,c); 
    } 
    else 
    { 
     return c.Text; 
    } 
} 

回答

0

理想情況下,您應該將SelectedItem(以及您可能需要的任何其他數據)傳遞給代表後臺工作者的方法。

如果這不可能,那麼你可以使用comboBox1.Invoke方法與UI線程進行通信。

+0

是的,我目前正在使用'e.Argument'來做這件事,但是我從多種方法調用backgroundworker,並且對它們進行chaining並不是一個真正簡潔的解決方案。 – Devator

0

您可以在ReportProgress調用期間閱讀組合框。