.net System.Threading.Timer将在几次之后停止

.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

我在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, 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之外,然后它就可以工作了。对于同时完成的两次下载,它确实会抛出一个异常“文本文件正在被其他进程使用”。酷!很高兴这对你有用。