我目前正在开发一个C#应用程序,在那里我读取通过USB端口发送的串行数据,这些数据将显示在文本框中,最后显示在数据库中。我现在的代码刷新了每2秒读取一次的串行数据,但是我无法将数据放到textBox上。我对C#开发还是比较陌生的,所以我不确定将数据输出到文本框的最佳方法是什么,或者首先解决我的问题。我的代码如下。
PREFIX lemon: <http://lemon-model.net/lemon#>
PREFIX lvont: <http://lexvo.org/ontology#>
SELECT ?lemon ?sense ?nsas WHERE {
?lemon a lemon:Form ;
lemon:writtenRep ?sense .
?sense lemon:reference ?ref .
?ref lvont:nearlySameAs ?nsas .
} LIMIT 1
答案 0 :(得分:0)
事件DataReceived
使用方法DataReceivedHandler
在与创建控件textBox1
不同的线程上处理。因此,在运行程序时,您应该获得System.InvalidOperationException
。这说明了我刚刚描述的内容。
要摆脱这种困境,您可以使用Control.BeginInvoke方法:
在创建控件底层句柄的线程上异步执行指定的委托。
基本上它会将这段代码拖到创建控件的线程上。在这种情况下主线程。这就是你如何使用它:
//writes to text box
textBox1.BeginInvoke(new Action(() => { textBox1.Text = data; }));
我希望它有所帮助。