2012-11-11 66 views
1

這是我第一次製作一個Windows服務應用程序。我試圖使用Windows服務應用程序將文件從一個文件夾移動到另一個文件夾。它會每10秒鐘完成一次。 這是我正在使用的代碼。它在Windows窗體應用程序中使用時起作用,但在Windows服務應用程序上使用它時不起作用。移動文件在Windows服務

如果我在OnStart中使用它,Timer1_Tick中的代碼將起作用。但在計時器中不起作用。

Protected Overrides Sub OnStart(ByVal args() As String) 
     Timer1.Enabled = True 
    End Sub 

    Protected Overrides Sub OnStop() 
     Timer1.Enabled = False 
    End Sub 

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick 
     Dim FileToMove As String 
     Dim MoveLocation As String 
     Dim count1 As Integer = 0 
     Dim files() As String = Directory.GetFiles("C:\Documents and Settings\dmmc.operation\Desktop\Q8") 
     Dim pdfFiles(100) As String 

     For i = 0 To files.Length - 1 
      If Path.GetExtension(files(i)) = ".pdf" Then 
       pdfFiles(count1) = files(i) 
       count1 += 1 
      End If 
     Next 

     For i = 0 To pdfFiles.Length - 1 
      If pdfFiles(i) <> "" Then 
       FileToMove = pdfFiles(i) 
       MoveLocation = "C:\Documents and Settings\dmmc.operation\Desktop\Output\" + Path.GetFileName(pdfFiles(i)) 
       If File.Exists(FileToMove) = True Then 
        File.Move(FileToMove, MoveLocation) 
       End If 
      End If 
     Next 

    End Sub 

回答

1

如果沒有實例化窗體,Windows.Forms.Timer將無法工作。你應該使用System.Timers.Timer代替:

Private WithEvents m_timer As System.Timers.Timer 

Protected Overrides Sub OnStart(ByVal args() As String) 
    m_timer = New System.Timers.Timer(1000) ' 1 second 
    m_timer.Enabled = True 
End Sub 

Private Sub m_timer_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles m_timer.Elapsed 
    m_timer.Enabled = False 

    'Do your stuff here 

    m_timer.Enabled = True 
End Sub 
+0

我檢查了權限,所有都是正確的。 然後,我試着運行代碼沒有計時器,它的工作。 你認爲代碼中有錯誤嗎? – user1648225

+0

這聽起來像你正在使用Windows.Forms.Timer。 Windows.Forms.Timer不能在Windows服務中工作(沒有窗體被實例化)。你應該使用System.Timers.Timer。我將用樣本編輯答案。 –

+0

感謝您的代碼 – user1648225