你好,我正在尝试编写下面的代码来触发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发布于 2012-07-18 22:27:07
您的问题是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-19 01:36:00
代码必须是这样的。
但我们必须牢记这一点。如果您将间隔设置为50秒,则对于每秒钟,代码执行应在开始标记行下面的断点处停止,即_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
Endhttps://stackoverflow.com/questions/11543547
复制相似问题