0

こんにちは、以下のコードを記述して MyHelper メソッドを起動しようとしています。しかし、timScheduledTask.Elapsed で起動していません。
誰か助けてください。MyHelper メソッドを起動する最良の方法は何ですか?

 Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)

        Dim timScheduledTask As New System.Timers.Timer
        timScheduledTask.Interval = 600 * 1000 //in milliseconds    
        timScheduledTask.Enabled = True
        timScheduledTask.Start()
    **AddHandler timScheduledTask.Elapsed, AddressOf MyHelper**    
    End Sub

    Protected Sub MyHelper(ByVal sender As Object, ByVal e As EventArgs)
        //Just Do something        
    End Sub
4

2 に答える 2

0

あなたの問題は、timScheduledTaskが関数の場所変数であるApplication_Startことです。この関数が終了すると、タイマーのインスタンスはガベージ コレクターによって破棄されます。タイマーをクラス変数に格納すれば問題ありません。

たとえば、次のようにします。

Public Class Foo
    Private timScheduledTask As System.Timers.Timer

    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
        timScheduledTask = New System.Timers.Timer
        timScheduledTask.Interval = 600 * 1000 //in milliseconds    
        timScheduledTask.Enabled = True
        timScheduledTask.Start()
        AddHandler timScheduledTask.Elapsed, AddressOf MyHelper   
    End Sub

    Protected Sub MyHelper(ByVal sender As Object, ByVal e As EventArgs)
        Dim ds As DataSet = obj1.Dataset()

        Dim onRemoveCallback As CacheItemRemovedCallback

        _cache.Insert("ResultDataset", ds, New CacheDependency("C:\AspNetSql\Quotes.Quotations"), Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.[Default], onRemoveCallback)
    End Sub
End Class

または、次のようにします。

Public Class Foo
    Private WithEvents timScheduledTask As System.Timers.Timer

    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
        timScheduledTask = New System.Timers.Timer
        timScheduledTask.Interval = 600 * 1000 //in milliseconds    
        timScheduledTask.Enabled = True
        timScheduledTask.Start()  
    End Sub

    Protected Sub MyHelper(ByVal sender As Object, ByVal e As EventArgs) Handles timScheduledTask.Elapsed
        Dim ds As DataSet = obj1.Dataset()

        Dim onRemoveCallback As CacheItemRemovedCallback

        _cache.Insert("ResultDataset", ds, New CacheDependency("C:\AspNetSql\Quotes.Quotations"), Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.[Default], onRemoveCallback)
    End Sub
End Class
于 2012-07-18T14:27:06.683 に答える
0

コードは次のようにする必要があります。
しかし、私たちが心に留めておかなければならない主なこと. 間隔を 50 秒に設定すると、1 秒ごとに、コードの実行は開始マークの下の行、つまり _cache.insert のブレーク ポイントで停止する必要があります。

Class Foo  
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)

        //Caching the Dataset for every mentioned time interval
        _cache = Context.Cache
        Dim timer As New System.Timers.Timer()
        timer.Interval = 50 * 1000 //in milliseconds = 50Seconds   
        timer.Enabled = True

        //Automatically calling the GetMetricsDataset mothod for every mentioned time interval
        AddHandler timer.Elapsed, AddressOf Me.GetDataset

        timer.Stop()
        timer.Start()

    End Sub

    Private Function GetDataset(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) As DataSet
        Dim ds As DataSet = obj1.GetDataset()

        Dim onRemoveCallback As CacheItemRemovedCallback

        **_cache.Insert("Dataset", ds, New CacheDependency("C:\AspNetSql\Quotes.Quotations"), Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.[Default], _
         onRemoveCallback)**

        Return ds
    End Function
End
于 2012-07-18T17:35:59.940 に答える