需要长时间执行的任务,如果不给提示,会造成用户误解程序出问题,对这样的情况一般是做进度条或者一个动态加载的图片实现用户友好性。这两种方式在JAVA里面很好实现,但VB实现起来就麻烦点,下面和大家一起学习下。
VB用户友好提示有几种方法:
1、进度条(使用VB自带进度条控件)
2、使用动态图片
对于VB自带进度条控件,他的实现方式是我们长时间执行的任务在一个for循环里面,因VB是以单线程模式运行,程序只有等待循环运行结束后才执行别的程序代码,这样机器一直处于循环之中,而不能响应别的事情,对CPU资源来说是一种浪费,那么可不可以既让循环执行,又可以执行程序另外的一部分代码呢?答案是可以的,用多线程(VB多线程可以用API函数实现和创建activex_exe实现)或者DoEvents。这里实现方式是DoEvents。通过在循环里面调用DoEvents释放CPU让Timer执行进度条任务。
Form1.frm(4个控件:ProgressBar1、Text1、Timer2、Command1)
Option Explicit Private Sub Command1_Click() Dim a As Integer Form1.Enabled = False Timer2.Enabled = True For a = 0 To 2000 Text1.Text = a Sleep 1 DoEvents Next ProgressBar1.Value = 100 Timer2.Enabled = False Form1.Enabled = True MsgBox “Download Finish” End Sub Private Sub Form_Load() Timer2.Enabled = False End Sub Private Sub Timer2_Timer() Do If ProgressBar1.Value = 100 Then ProgressBar1.Value = 0 ProgressBar1.Value = ProgressBar1.Value + 10 Exit Do Loop End Sub
效果:
对于使用动态图片实现用户友好提示的,VB不支持动态图片格式GIF,需要分解GIF图片为多个切片图片,然后用timer一帧一帧的实现。
上面两种方式单个单个的运行都还可以,但是当我们执行一个长时间运行的任务时调用它们,在IDE中调试是可以实现,但是打包安装之后运行就不行,非得我们的大任务执行完之后才会调用,或者调用完进度条之后才调用大任务的。在VB中总是这种单任务运行方式。