VB.net 中界面与线程
2017-08-18 23:07
162 查看
先吐槽个事情
这个csdn你放在自己首面上合适吗,哥哥不吹牛,自己写的设备程序中,它有几根毛,我都查的出来。如果我对
自己写的设备软件和设备不了解,这个世界上没有人更了解这个设备和它的软件了。你搞这么句话,是想说什么
证明什么?自己哪一天被程序员骂成猪了,现在趁着这个机会讨回来吗
Vb.net中用户启动的线程是不能直接操作界面资源的。具体的说
在一个界面中
在一个按键响应程序中
Private Sub BnTest_Click(senderAs Object, eAs EventArgs)Handles BnTest.Click
Dim _thread
As Thread
_thread = New Thread(AddressOf FuncThread)
_thread.Start()
End Sub
在线程FuncThread中不能直接调用 label.text=”string”
那么如何解决这个问题呢?
这分两种情况
l FuncThread的代码与mainform在一个类中实现
l FnncThread的代码在module中,或其它不与mainform在一起的位置
第一种情况,我们可以这样处理
Public sub FuncThread()
Dim showMethod As Action= AddressOf Me.DisplayToWindow
showMethod()
End sub
Public sub DisplayToWindow()
label.text=”what you want to display”
End sub
这种方法中间有个委托showMethod做桥梁,实现了线程改变界面的梦想。
第二种情况,如果我们将FuncThread写在了一个module文件中,实现的方式是这样的。
第一步,在moudule文件中定义一个全局委托
Dim gDeleagteShowMethod as Action
第二步,在mainform中写好处理函数 DisplayToWindow()
第三步,在mainform中写好利用委托调用处理函数的函数
Public Sub DelegateShow()
Dim myCall As Action = AddressOf Me.DisplayToWindow
Me.Invoke(myCall)
'myCall()
End Sub
注意这一步中不能直接调用mycall()要伤脑筋Me.Invoke(myCall)
第三步,在mainform load事件中,将委托实例化
gDeleagteShowMethod = AddressOf Me.DelegateShow
第四步,在moudule文件中调用全局委托
gDeleagteShowMethod()
实现在模块代码中修改界面的梦想。
第二种方法总结起来,就是使用了两次委托。
第一次是在mainform的load事件中让全局委托找到自己对应的实例。
第二次调用mainform的invoke方法,让mainform界面线程在自己的一个合适时间修改界面相关显示。
这个csdn你放在自己首面上合适吗,哥哥不吹牛,自己写的设备程序中,它有几根毛,我都查的出来。如果我对
自己写的设备软件和设备不了解,这个世界上没有人更了解这个设备和它的软件了。你搞这么句话,是想说什么
证明什么?自己哪一天被程序员骂成猪了,现在趁着这个机会讨回来吗
Vb.net中用户启动的线程是不能直接操作界面资源的。具体的说
在一个界面中
在一个按键响应程序中
Private Sub BnTest_Click(senderAs Object, eAs EventArgs)Handles BnTest.Click
Dim _thread
As Thread
_thread = New Thread(AddressOf FuncThread)
_thread.Start()
End Sub
在线程FuncThread中不能直接调用 label.text=”string”
那么如何解决这个问题呢?
这分两种情况
l FuncThread的代码与mainform在一个类中实现
l FnncThread的代码在module中,或其它不与mainform在一起的位置
第一种情况,我们可以这样处理
Public sub FuncThread()
Dim showMethod As Action= AddressOf Me.DisplayToWindow
showMethod()
End sub
Public sub DisplayToWindow()
label.text=”what you want to display”
End sub
这种方法中间有个委托showMethod做桥梁,实现了线程改变界面的梦想。
第二种情况,如果我们将FuncThread写在了一个module文件中,实现的方式是这样的。
第一步,在moudule文件中定义一个全局委托
Dim gDeleagteShowMethod as Action
第二步,在mainform中写好处理函数 DisplayToWindow()
第三步,在mainform中写好利用委托调用处理函数的函数
Public Sub DelegateShow()
Dim myCall As Action = AddressOf Me.DisplayToWindow
Me.Invoke(myCall)
'myCall()
End Sub
注意这一步中不能直接调用mycall()要伤脑筋Me.Invoke(myCall)
第三步,在mainform load事件中,将委托实例化
gDeleagteShowMethod = AddressOf Me.DelegateShow
第四步,在moudule文件中调用全局委托
gDeleagteShowMethod()
实现在模块代码中修改界面的梦想。
第二种方法总结起来,就是使用了两次委托。
第一次是在mainform的load事件中让全局委托找到自己对应的实例。
第二次调用mainform的invoke方法,让mainform界面线程在自己的一个合适时间修改界面相关显示。
相关文章推荐
- vb.net 通过线程来控制界面的方法
- [VB.NET]在线程里频繁的进行委托操作主界面的ui是不是效果不好?
- VB.NET 开发的WINDOWS 界面控件如何应用在网页中
- VB.net应用技巧4: 跨线程调用控件
- 介绍VB.NET的线程(英文)
- vb.net的异步读写数据流(使用线程、委托)
- C# vb.net 线程中安全的使访问示例
- VB.NET中多线程程序开发之线程控制
- VB.Net + asp.net的一个web系统,使用SQL2000数据库 现在运行时偶尔会出现一个奇怪现象,一个用户登录时,登录后的界面竟然是另一个用户
- 旧话重提_关于vb, vb.net, c#.net下dll远线程注入
- vb.net 初始屏幕界面透明实现方法
- 章鱼哥出品_VB.NET 线程委托应用实例 一个简单的例子让你轻松掌握委托的用法
- [VB.NET]关于线程和委托的问题
- vb.net跨线程调用实例
- VB.NET通过deletgrate传递线程的参数
- vb.net 简单登录界面(三层架构思想)
- [vb.net]解决 "在某个线程上创建的控件不能成为在另一个线程上创建的控件的父级"
- 用VB.net绘制漂亮的splash界面
- 【VB.NET】打造一个象棋魔法学校的老师——谨以此文献给象棋爱好者——编写界面和功能的最终实现
- [VB.NET源码]界面美化(免费界面控件)