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万个错误;我是如何在余下的代码中做的?你是否考虑重命名函数并保留原件?它确实是正常工作的。我不能完全理解它的功能,以及它给我的函数增加了什么。不要使用你不懂的代码。把它全部撕下来,等你准备好了再穿一天。