从backgroundworker检索GUI数据

时间:2012-05-03 10:14:31

标签: c# backgroundworker

我有一个需要抓取comboBox1.SelectedItem的后台工作者,但是它位于不同的线程上,因此我无法“到达”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;
    }
}

2 个答案:

答案 0 :(得分:0)

理想情况下,您应该将SelectedItem(以及您可能需要的任何其他数据)传递给代表后台工作程序的方法。

如果那不可能,那么您可以使用 comboBox1.Invoke 方法与UI线程进行通信。

答案 1 :(得分:0)

您可以在ReportProgress调用期间阅读组合框。