vb.net中的动态计时器

时间:2012-02-29 12:56:58

标签: vb.net multithreading timer

我正在使用.Net 4中的vb应用程序。该应用程序启动动态线程以运行一些作业。每个线程都运行一个特定的作业,在该线程中,它执行一个无限循环。它需要这样,我不能有线程,然后再开始......

无论如何..我在循环中使用threading.thread.sleep让循环暂停一段时间再运行。这似乎不是一个好的方法,不推荐。所以我想也许我可以使用动态计时器或其他东西让线程等30秒然后再次运行。我希望有人可以给我一些方向和示例代码。

感谢 香农

~~~~~~~~~~编辑 嘿..我想出了问题而没有..它不是后台线程中的睡眠....这是一个睡眠我没有意识到我放入UI线程..我开始注释掉一切开始逐一添加并找到它。抱歉PEBKAM错误......

感谢输入

1 个答案:

答案 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)