按键精灵如何使用子线程来让界面不卡顿
1、先创建一个很简单的按键精灵界面,只要一个运行按钮

2、点击运行按钮之后的操作为延迟5秒(模拟耗时操作),调试运行后你会发现,点击按钮后界面会卡住,直到5秒后才恢复

3、首先要把我们的响应事件代码封装成sub代码块

4、响应事件改为点击按钮后开启一个子线程去执行耗时操作的代码块

5、我们需要注意用户多次点击的问题,要防止开启多个线程,这里我们使用一个全局变量来作为标记,当第一次进来后,就修改flag的值,把门关上,在执行完线程后,再修改flag的值,把门打开


6、为了让用户有更好的体验,我们可以再加一个线程运行中的提示,例如在界面上加一个label,注意属性设置为不可见

7、然后在代码中设置进度label的显示与隐藏,开启启动线程之前显示,在线程结束之前隐藏即可

8、为了让用户体验更好,我们打算让三个省略号动起来,来体现程序正在运行中,我们用一个do loop死循环来写一个跑马灯的sub,然后在线程中再开一个子线程去定时更新界面上的内容,在耗时操作完成之后,关闭跑马灯线程.

9、如果想使用更炫酷的提示控截狠劣件,可以考虑使用大漠插件的foobar来实现.
源码:
Global Button1_thread_flag
Button1_thread_flag = 0
Event Form1.Button1.Click
If Button1_thread_flag = 0 Then
//关门
Button1_thread_flag = 1
//执行线程
BeginThread button_1_click
End If
End Event
Sub show_wait
Do
Form1.Label1.Caption = "脚本运行中."
Delay 1000
Form1.Label1.Caption = "脚本场销运行中.."
Delay 1000
Form1.Label1.Caption = "脚本运行中..."
Delay 1000
Loop
End Sub
Sub button_1_click
Form1.Label1.Visible = true
//开始跑针诸马灯
id_1 = BeginThread (show_wait)
TracePrint "线程开始执行"
Delay 10000
TracePrint "线程执行完毕"
//停止跑马灯
StopThread id_1
Form1.Label1.Visible = False
//开门
Button1_thread_flag = 0
End Sub