VB.NET多线程界面交互问题
时间:2011-12-12
来源:互联网
使用多线程但提示“其他Control.Invoke 必须用于与在独立线程上创建的控件交互”
程序运行时要获取控件值并要写入信息到textbox控件
这个多线程与界面交互的问题如何解决,或者不用多线程有没其他办法解决程序在运行中,其他可以控件操作,例如暂停程序运行,或者停止运行。
多线程代码如下:
VB.NET code
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cl_celiang.Click myThread = New Thread(AddressOf celiang) myThread.Start() end sub Sub celiang() textbox1.Text = "目前处于自动观测模式" & vbCrLf & "请等待仪器进行自动观测" Threading.Thread.Sleep(2000) '延时函数 textbox1.Text = "" '以下略 ’以下为数据读控件取数据并计算将结果输出至textbox控件 end sub
作者: hao8986 发布时间: 2011-12-12
或者简单点,在sub Main函数里加上下面这句代码,线程里就可以访问ui控件了
sub Main()
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls=False...
end sub
作者: gxingmin 发布时间: 2011-12-12
多线程中不能直接访问ui控件,你用invoke调用委托函数,
或者简单点,在sub Main函数里加上下面这句代码,线程里就可以访问ui控件了
sub Main()
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls=False...
end sub
用Invoke也很简单
VB.NET code
Public Delegate Sub ChangeTextDelegate(tb As TextBox,Conetnt As String); Public Sub ChangeTextInvoke(tb As TextBox,Conetnt As String) { tb.Text = Conetnt; } textbox1.Invoke(new ChangeTextDelegate(Addressof ChangeTextInvoke),new object(){textbox1,"目前处于自动观测模式" & vbCrLf & "请等待仪器进行自动观测"})
作者: bunliney 发布时间: 2011-12-12
引用 1 楼 gxingmin 的回复:
多线程中不能直接访问ui控件,你用invoke调用委托函数,
或者简单点,在sub Main函数里加上下面这句代码,线程里就可以访问ui控件了
sub Main()
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls=False...
end sub
用Invo……
+1
用委托吧,当然1楼的代码也行,不过很偷懒的说.
作者: xiaolinyouni 发布时间: 2011-12-13
多线程中不能直接访问ui控件,你用invoke调用委托函数,
或者简单点,在sub Main函数里加上下面这句代码,线程里就可以访问ui控件了
sub Main()
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls=False...
end sub
提示错误 2 “CheckForIllegalCrossThreadCalls”不是“System.Windows.Forms.TextBox”的成员。
invoke我还没测试,如果用invoke调用委托函数每个textbox都必须进行委托?获取textbox控件值也可以吗?
我的界面中有好几个textbox控件,功能是:通过串口通讯获取数据显示到其中几个textbox控件中,再获取这几个textbox控件的值通过计算,计算结果输出到另一个textbox控件中。
作者: hao8986 发布时间: 2011-12-13
CheckForIllegalCrossThreadCalls是Control类的静态属性,直接写下面这句代码就行了
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls=False
作者: gxingmin 发布时间: 2011-12-13
为什么要把CheckForIllegalCrossThreadCalls加到TextBox上?
CheckForIllegalCrossThreadCalls是Control类的静态属性,直接写下面这句代码就行了
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls=False
错误 1 “CheckForIllegalCrossThreadCalls”不是“System.Windows.Forms.Control”的成员。
作者: hao8986 发布时间: 2011-12-13
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28