C#Func Delegate抛出线程异常

Hen*_*sel 0 c#

所以,也许我误解了Func的用法但是

Func<ComboBox, string> getCurrentValue = s => s.SelectedValue.ToString();
Run Code Online (Sandbox Code Playgroud)

getCurrentValue(cb_message_type)从我的Workerthread 调用时创建一个线程错误.什么是获得Combobox选定价值的最佳解决方案?

非常感谢,
rAyt

编辑
MSDN

"lambda表达式的基础类型是通用Func委托之一.这使得可以将lambda表达式作为参数传递,而无需将其明确地分配给委托."

Mar*_*ell 5

由于Windows控件具有线程关联性,因此您有两个选项:

  1. 在执行线程代码之前查询此数据,例如将其作为状态传递给worker
  2. 通过Control.Invoke在worker中查询它

由于第一个是微不足道的,我将使用捕获的变量给出第二个示例:

object value = null;
yourCombo.Invoke((MethodInvoker) delegate {value=yourCombo.SelectedValue;});
string s = value.ToString();
Run Code Online (Sandbox Code Playgroud)

这里的内部位delegate {...}发生在UI线程上,即使它周围的代码在工作线程上.您可以 func中混合上面的内容,或者在切换线程后调用整个func.