2015-02-23 108 views
0

我有一个ComboBox名为cableGaugeSelect的窗体。有时我需要读取当前选择的索引以响应串行消息。该代码不会有问题阅读文本框或复选框,但是当它到达读所选择的指数访问从UI以外的其他线程组合框控件

cableGaugue[0] = (byte) cableGaugeSelect.SelectedIndex; 

我得到一个未处理的异常:

“跨线程操作无效:控制'cableGaugeSelect'从非创建线程的线程访问。“

看来我不得不使用委托从线程之间获取数据,但是我发现如何使用委托的所有示例都是如何将文本放入文本框。我在计算如何创建将检索此信息的委托时遇到了很多问题。任何帮助将被触发

+0

是否有一个原因,你是一个'int'投给'byte'? – mittmemo 2015-02-23 23:56:11

+2

跨线程操作Google很好。您不能访问后台线程中的控件。你需要更好地记录这一点。简单的方法是在线程开始时将需要的信息作为参数传递。 – LarsTech 2015-02-24 00:00:02

+1

_“,但我发现如何使用委托的所有示例都是如何将文本放入**文本框**”_ - 'TextBox'; 'ComboBox'; 'Listbox' - 没关系,解决方案是一样的。不需要另一个问题。你有没有试图尝试在另一篇文章中找到的解决方案?祝你好运 – MickyD 2015-02-24 00:06:42

回答

2

如果你想触摸控件,你需要在UI线程上做到这一点。你可以通过利用Control.Invoke()来做到这一点。

cableGuageSelect.Invoke(new Action(() => 
    { 
     cableGuage[0] = (byte)cableGuageSelect.SelectedIndex; 
    })); 
+0

谢谢你,工作。 – 2015-02-24 00:34:00

相关问题