2013-09-05 5 views
1

건배! 나는 .net 4.0으로 작업 중이며 vb.net 콘솔 응용 프로그램을 작성 중이다. 응용 프로그램은 폴더를 모니터링하고 새 파일을 저장할 때마다 무언가를해야합니다.WaitForChanged 루프가 처음 통화 후 실행되지 않음

항상 처음에는 돌아 다니지 만 후속 이동은 실패한 것처럼 보입니다. 이유는 알 수 없습니다. 그것을 테스트하려면 테스트 폴더에 한 번에 1 개 이상을 캡처 폴더에 복사하고, 프로세스를 기다린 다음 다른 하나를 드롭하려고하는 테스트 폴더에 테스트 이미지가 있어야합니다.

Public Sub FileChanges() 
     Dim result As System.IO.WaitForChangedResult 
     watchfolder = New System.IO.FileSystemWatcher() 
     watchfolder.Path = My.Settings.WATCHDIR.ToString() 
     Console.WriteLine("Application Running, Waiting for a file") 
     result = watchfolder.WaitForChanged(System.IO.WatcherChangeTypes.Created) 
     Console.WriteLine("Filechange Detected") 
     Dim fileName As String = My.Settings.WATCHDIR.ToString() & result.Name.ToString() 
End Sub 
sub main() 
    Do 
    system.threading.thread.sleep(5000) 
    FileChanges() 
    Loop 
End Sub 

어떤 생각을 다음과 같이

코드는 무엇입니까? 파일이 생성 될 때까지 기다렸다가 무언가를 할 수있는 콘솔 응용 프로그램의 더 좋은 방법은 무엇입니까? 여기

Private Sub watchfolder_event(ByVal sender As Object, _ 
ByVal e As system.IO.FileSystemEventArgs) Handles watchfolder.changed 
... 

가 VB 2008 년에 작동하는 예입니다 :

다음 변경 이벤트를 처리하는 핸들러를 사용

watchfolder.EnableRaisingEvents = True 

:

+0

하나의 FileSystemWatcher를 사용하고 반복해서 만들지 마십시오. 그리고 5 초 동안 잠을 자지 마라. 그것은 무의미하다. –

답변

1

한 번만 감시자를 선언하고 모금 행사 가능
Module Module1 

Dim WithEvents watchfolder As New System.IO.FileSystemWatcher 

Sub Main() 
watchfolder.Path = "c:\tmp" 
watchfolder.EnableRaisingEvents = True 

For i As Integer = 1 To 500 
    System.Threading.Thread.Sleep(1000) 
    Console.WriteLine("tick " & i) 
Next i 

End Sub 

Private Sub watchfolder_event(ByVal sender As Object, ByVal e As System.IO.FileSystemEventArgs) Handles watchfolder.Changed 
Console.WriteLine("changed.") 
End Sub 

End Module 
+0

내가 처리기를 추가하는 문제는 콘솔 응용 프로그램에서 파일 처리기가 다른 스레드에 연결될 때 응용 프로그램이 종료되고 콘솔 응용 프로그램에서 동기화하는 방법을 확신 할 수 없다는 것입니다. –

+0

모듈 수준에서 watchfolder를 선언했는지 확인하십시오. 작동하는 샘플 콘솔 앱을 추가했습니다 (2008 년). – xpda

+0

위와 같이 코드를 수정했지만 watchfolder.changes에 충돌이 발생하지 않았습니다 ... –

관련 문제