我正在使用.Net 4中的vb应用程序。该应用程序启动动态线程以运行一些作业。每个线程都运行一个特定的作业,在该线程中,它执行一个无限循环。它需要这样,我不能有线程,然后再开始......
无论如何..我在循环中使用threading.thread.sleep让循环暂停一段时间再运行。这似乎不是一个好的方法,不推荐。所以我想也许我可以使用动态计时器或其他东西让线程等30秒然后再次运行。我希望有人可以给我一些方向和示例代码。
感谢 香农
~~~~~~~~~~编辑 嘿..我想出了问题而没有..它不是后台线程中的睡眠....这是一个睡眠我没有意识到我放入UI线程..我开始注释掉一切开始逐一添加并找到它。抱歉PEBKAM错误......
感谢输入
答案 0 :(得分:1)
使用以下类来做延迟,我使用相同的javascript概念开发:settimeout:
Public Class JSsetTimeout
Public res As Object = Nothing
Dim WithEvents tm As Timer = Nothing
Dim _MethodName As String
Dim _args() As Object
Dim _ClassInstacne As Object = Nothing
Public Shared Sub SetTimeout(ByVal ClassInstacne As Object, ByVal obj As String, ByVal TimeSpan As Integer, ByVal ParamArray args() As Object)
Dim jssto As New JSsetTimeout(ClassInstacne, obj, TimeSpan, args)
End Sub
Public Sub New(ByVal ClassInstacne As Object, ByVal obj As String, ByVal TimeSpan As Integer, ByVal ParamArray args() As Object)
If obj IsNot Nothing Then
_MethodName = obj
_args = args
_ClassInstacne = ClassInstacne
tm = New Timer With {.Interval = TimeSpan, .Enabled = False}
AddHandler tm.Tick, AddressOf tm_Tick
tm.Start()
End If
End Sub
Private Sub tm_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles tm.Tick
tm.Stop()
RemoveHandler tm.Tick, AddressOf tm_Tick
If Not String.IsNullOrEmpty(_MethodName) AndAlso _ClassInstacne IsNot Nothing Then
res = CallByName(_ClassInstacne, _MethodName, CallType.Method, _args)
Else
res = Nothing
End If
End Sub
End Class
<强>用法强>
JSsetTimeout.SetTimeout(ClassContainingMethod, "MethodName", 30000, OptionalParameters)