关于VB.net Timer控件与多线程问题
我在调用某一过程的时候,因时间较长,需要给用户以“数据加载中”的提示,想用Timer做成动态的形式。但是在调用的时候,Timer似乎不响应,有没有高手能指定一二?Impo...
我在调用某一过程的时候,因时间较长,需要给用户以“数据加载中”的提示,想用Timer做成动态的形式。
但是在调用的时候,Timer 似乎不响应,有没有高手能指定一二?
Imports System.Threading
Public Class Form1
Dim nn As Integer
Public Delegate Sub VoidDelegate1()
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Label1.Visible = True
Dim th As New Threading.Thread(AddressOf MyThreadProc)
th.Start()
For i As Integer = 0 To 1000
For i1 As Integer = 0 To 1000000
'假设为执行其他代码
Next
Next
Label2.Text = "执行完毕"
Label1.Visible = False
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If nn <= 5 Then
nn = nn + 1
Label1.Text = Label1.Text & "."
Else
nn = 0
Label1.Text = "数据加载中"
End If
End Sub
Public Sub MyThreadProc()
'更新ui资源例子
Me.Invoke(New VoidDelegate1(AddressOf UpdateText))
End Sub
Public Sub UpdateText()
'实际更新界面
Timer1.Enabled = True
End Sub
End Class 展开
但是在调用的时候,Timer 似乎不响应,有没有高手能指定一二?
Imports System.Threading
Public Class Form1
Dim nn As Integer
Public Delegate Sub VoidDelegate1()
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Label1.Visible = True
Dim th As New Threading.Thread(AddressOf MyThreadProc)
th.Start()
For i As Integer = 0 To 1000
For i1 As Integer = 0 To 1000000
'假设为执行其他代码
Next
Next
Label2.Text = "执行完毕"
Label1.Visible = False
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If nn <= 5 Then
nn = nn + 1
Label1.Text = Label1.Text & "."
Else
nn = 0
Label1.Text = "数据加载中"
End If
End Sub
Public Sub MyThreadProc()
'更新ui资源例子
Me.Invoke(New VoidDelegate1(AddressOf UpdateText))
End Sub
Public Sub UpdateText()
'实际更新界面
Timer1.Enabled = True
End Sub
End Class 展开
1个回答
展开全部
Timer 是在 主线程里执行的,Thread 是在自己的线程中执行的,多核心的CPU使用线程能提高处理能力。回到你的问题,主线程如果卡死,timer就会失去响应,很正常的。请使用System.Timers.Timer类吧。请参考一下:
http://developer.51cto.com/art/200910/159113.htm
http://developer.51cto.com/art/200910/159113.htm
追问
不好意思,能不能给一个简单的实例?
追答
回头我给你做一个吧。今天快下班了,麻烦采纳喔~
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询