一、暴露问题——窗体假死
新建一个Windown窗体应用程序,在窗体代码里写入如下代码:
Public Class MainForm
Dim intTime As Integer = 0
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click
'运行计时器
intTime = 0
Me.Timer1.Enabled = True
'******************************
'模拟长时间工作代码
Me.Label1.Text = "开始工作!"
For i As Integer = 0 To 100
'模拟长时间工作
Threading.Thread.Sleep(100)
'显示工作进度
Me.Label1.Text = i.ToString & "%"
Next
'******************************
'关闭计时器
Me.Timer1.Enabled = False
End Sub
Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.Timer1.Interval = 1000 '设置引发Timer1.Tick事件的时间间隔
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
intTime += Me.Timer1.Interval
'实时显示运行时间
Me.Label2.Text = String.Format("{0}秒", intTime / 1000)
End Sub
End Class
因为需长时间运行代码,所以想整个显示工作进度的界面,2种实现方式:百分比方式适用于循环等知道总工作量的代码、计时显示适用于无法事先计算总工作量的代码,可是测试时却发现事与愿为,代码并没有依我们所想象的那样在窗体界面实时显示工作进度或工作时间,而且窗体失去响应,无法拖动,点击按钮也没有反应,甚至计时器压根就没有启动计时工作。因为不知道是否成功运行了按钮事件代码,所以忍不住的多次重复点击按钮,又发现程序会重复运行按钮事件代码,即使将按钮的Enalbe 属性设置为 false还是会触发点击事件,这可不是我想的结果。
于是从网上搜索得知