VB.net使用多线程与委托解决时间延迟的问题
2010-12-16 14:46
507 查看
问题的来由:
设置保存后,希望有提示“已保存”,并在提示出现后,延时5秒,随后提示自动消失
就是下文中Label7.text的显示变成""
最早是希望用thread.sleep 来解决的,最简单:
但是会造成页面无反应,假死5秒,相当不爽
直接使用 DoEvents() ,也会假死:
随后考虑使用100毫秒的时间间隔,使用 Sleep 配合 DoEvents
发现效果还行。只是在点击文本框的时候,需要点击2次,只能说还是略有遗憾。
最后使用了threading.thread.timer,使用多线程,并因为timer不能在多线程下控制窗口控件,于是采用委托,解决问题
设置保存后,希望有提示“已保存”,并在提示出现后,延时5秒,随后提示自动消失
就是下文中Label7.text的显示变成""
最早是希望用thread.sleep 来解决的,最简单:
Private Sub main() Label7.Text = "已保存" Threading.Thread.Sleep(5000) Label7.Text = "" End Sub
但是会造成页面无反应,假死5秒,相当不爽
直接使用 DoEvents() ,也会假死:
Private Sub main() Label7.Text = "已保存" Dim tmpNow As Date = Now While Now.Subtract(tmpNow).Seconds < 5 '5秒后消失 Windows.Forms.Application.DoEvents() End While Label7.Text = "" End Sub
随后考虑使用100毫秒的时间间隔,使用 Sleep 配合 DoEvents
Private Sub main() Label7.Text = "已保存" Dim i As Integer i = 50 While i > 0 Threading.Thread.Sleep(100) Windows.Forms.Application.DoEvents() i = i - 1 End While Label7.Text = "" End Sub
发现效果还行。只是在点击文本框的时候,需要点击2次,只能说还是略有遗憾。
最后使用了threading.thread.timer,使用多线程,并因为timer不能在多线程下控制窗口控件,于是采用委托,解决问题
Imports System Imports System.Threading Private Sub main() Label7.Text = "已保存" Dim tcb As New TimerCallback(AddressOf Me.TimerMethod) Dim objTimer As Timer objTimer = New Timer(tcb, Nothing, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(0)) '延迟5秒开始执行,间隔xx秒重复执行,0为不重复执行 Label7.Text = "" End Sub Public Sub TimerMethod(ByVal state As Object) Invoke(New DelegateSub(AddressOf SetText), "") '此处新建委托并执行 End Sub Public Delegate Sub DelegateSub(ByVal text As String)'定义一个委托 Public Sub SetText(ByVal text As String) '此处是接受委托,执行函数 Label7.Text = text End Sub
相关文章推荐
- [VB.NET]VB.net 读写ini的问题,希望好心人贡献下时间,帮忙解决下~~
- vb.net中使用GetPrivateProfileString访问INI文件,解决中文路径问题
- 解决VB.net使用COM控件加载Excel文件速度慢的问题
- vb.net中使用GetPrivateProfileString访问INI文件,解决中文路径问题
- VB.NET ACCESS数据库SQL查询使用时间的问题
- 使用doublebuffered来解决VB.net中datagridview数据显示和滚动慢和卡顿的问题
- 安装完vs.2005之后,重新安装iis后无法使用http方式访问asp.net工程的页面的问题的解决方法
- 解决asp.net中使用FckEditor上传文件,中文名称乱码的问题
- Java多线程之~~~使用Exchanger在线程之间交换数据[这个结合多线程并行会有解决很多问题]生产者消费者模型
- 使用Hibernate.initialize解决no session的延迟加载问题
- 随笔-解决VB使用XP风格后无法打开问题
- VM 虚拟机linux 时间总是延迟问题解决方法
- 完美解决苹果iphone手机使用时间和待机时间一样或差不多的问题[图]
- ASP.NET 4.0中使用FreeTextBox遇到安全问题警告的解决办法
- 关于VB.NET中使用JS文件问题
- [置顶] MySQL 5.7主从复制从零开始设置及全面详解——实现多线程并行同步,解决主从复制延迟问题!
- C#中使用多线程访问Winform问题解决方案
- asp.net的Web应用报“超时时间已到。在操作完成之前超时时间已过或服务器未响应”问题的解决
- 解决使用 libcurl 遇到的多线程崩溃问题
- 解决vs2013中ASP.net 网站无法启动和WEB API无法使用的问题