大家好我有一个能够读取蓝牙流接收数据的线程。在发件人部分,我做了一个while循环,其中count继续增加+ 1.我做了一个messagebox.show(测试);它工作正常,但当我做label.text =测试我得到:
“必须使用Control.Invoke与在单独线程上创建的控件进行交互。”错误。我在C#中使用了以下代码:
线程t =新线程(新的ThreadStart(readStream)); t.Start(); public void readStream() { 而(真) { String test = manager.Reader.ReadLine(); label1.Text = test; } }
我的问题是,如何在线程中更新标签?控件的任何简单方法都可以调用吗?
答案 0 :(得分:6)
以下是一个如何执行此操作的示例:
http://msdn.microsoft.com/en-us/library/ms171728.aspx
如果要从另一个线程更新标签,则应使用与此类似的功能。您无法直接更新。
简而言之:你应该这样写:
delegate void SetTextCallback(string text); private void SetText(string text) { // InvokeRequired required compares the thread ID of the // calling thread to the thread ID of the creating thread. // If these threads are different, it returns true. if (this.textBox1.InvokeRequired) { SetTextCallback d = new SetTextCallback(SetText); this.Invoke(d, new object[] { text }); } else { this.textBox1.Text = text; } }