.net System.Threading.Timer将在几次之后停止
我在VB.NET服务中有一个.net System.Threading.Timer将在几次之后停止,.net,vb.net,timer,.net,Vb.net,Timer,我在VB.NET服务中有一个System.Threading.Timer。然而,我不知道为什么计时器只运行了14次,然后就停止了。这项服务仍在运行。代码如下: Protected Overrides Sub OnStart(ByVal args() As String) Dim downloadCall As New TimerCallback(AddressOf download_tick) Dim timerDownload As New Timer(downloadCall
System.Threading.Timer
。然而,我不知道为什么计时器只运行了14次,然后就停止了。这项服务仍在运行。代码如下:
Protected Overrides Sub OnStart(ByVal args() As String)
Dim downloadCall As New TimerCallback(AddressOf download_tick)
Dim timerDownload As New Timer(downloadCall, Nothing, 0, 8000)
End Sub
Private Sub download_tick(ByVal sender As Object)
System.IO.File.AppendAllText(My.Application.Info.DirectoryPath & "\test\" & Now.ToString("yyyyMMddHHmmss") & ".txt", "")
Dim th As New Thread(AddressOf downloadPrintJob)
th.Start()
End Sub
Private Sub downloadPrintJob()
Try
Using webClient As New System.Net.WebClient()
.....
从上面的代码中,我发现如果我重新启动服务,每次都会生成14个文本文件。如果下载时间超过8秒,会发生什么
我会在作业下载时禁用计时器,然后在作业完成后重新启用它。我看到的一件事是,您正在
OnStart
中禁用计时器,然后在OnStart
完成时删除对它的引用。GC可能会吞下它,尽管我不认为它会像每次运行14次后处理它那样具有确定性。另外,如果两次下载同时完成,您将它们附加到同一个文件(如果秒数相同)会怎么样?谢谢helrich,您是对的,我将计时器声明移到onstart之外,然后它就可以工作了。对于同时完成的两次下载,它确实会抛出一个异常“文本文件正在被其他进程使用”。酷!很高兴这对你有用。