winforms C#/NET中comboBox1上的交叉线程错误

winforms C#/NET中comboBox1上的交叉线程错误,c#,winforms,visual-studio-2010,.net,C#,Winforms,Visual Studio 2010,.net,关于这件事我一直有个问题要问。但这里有另一个问题,有点不同,我找不到任何答案 String text = this.GuiThread(() => this.comboBox1.Text); if (text == "this") { //do somthing spectacular! } 文本是一个空变量,大约 使用未分配的局部变量。这是我得到的错误。我测试了我在这里和msdn上能找到的所有示例 我还有: public static class ControlEx

关于这件事我一直有个问题要问。但这里有另一个问题,有点不同,我找不到任何答案

String text = this.GuiThread(() => this.comboBox1.Text); 

 if (text == "this")
 {
   //do somthing spectacular!
 }
文本是一个空变量,大约

使用未分配的局部变量。这是我得到的错误。我测试了我在这里和msdn上能找到的所有示例

我还有:

  public static class ControlExtensions
    {
        public static void GuiThread(this Control ctrl, Action action)
        {
            if (ctrl.InvokeRequired)
            {
                ctrl.BeginInvoke(action);
            }
            else
            {
                action.Invoke();
            }
        }
    }

想法?

此代码无法编译。GuiThread返回void,您试图将其分配给字符串。如何获得异常是不可用的。它至少需要像这样:

public static class ControlExtensions {
    public static T GuiThread<T>(this Control ctrl, Func<T> action) {
        if (ctrl.InvokeRequired) {
            return (T)ctrl.Invoke(action);
        }
        else {
            return action();
        }
    }
}
公共静态类控制扩展{
公共静态T GuitThread(此控件ctrl,Func操作){
如果(ctrl.InvokeRequired){
返回(T)ctrl.Invoke(操作);
}
否则{
返回动作();
}
}
}

不要这样编写代码,您将读取的实际组合框文本是非常随机的,因为它可以在用户修改时获得。在启动线程时为其提供所需的参数。BackgroundWorker类使您免于麻烦。

该代码在我的其他GUI输出this.GuiThread(()=>this.listView1.Sorting=SortOrder.None)上给了我10万个错误;我是如何在余下的代码中做的?你是否考虑重命名函数并保留原件?它确实是正常工作的。我不能完全理解它的功能,以及它给我的函数增加了什么。不要使用你不懂的代码。把它全部撕下来,等你准备好了再穿一天。