2014-10-01 5 views
0

파일 감시자를 사용하고 있습니다. 파일이 생성되면 파일 감시자는 다시 호출 될 때까지 중지되어야합니다. 나는 다음 코드를보고 있는데 루프가 멈추지 않는다.파일 감시자 종료 파일을 만들 때

public void startwatch() 
    { 
      string path = "C:\\testwatcher\\"; 
      FileSystemWatcher watcher = new FileSystemWatcher(); 

      watcher.Path = path; 
      watcher.EnableRaisingEvents = true; 
      watcher.IncludeSubdirectories = false; 
      watcher.Filter = "*.*"; 
      watcher.Created += watcher_Created; 
      while (true) ; 
    } 
    static void watcher_Created(object sender, FileSystemEventArgs e) 
    { 
     string FileName = ("C:\\testfilescrated\\"); 
     string text = File.ReadAllText(e.FullPath); 
     File.WriteAllText(FileName, text); 
    } 

내가 원하는 것은 while 루프가 파일을 만들 때 종료되어야한다는 것입니다.

+0

아주 좋지 않습니다. 일어날 수도 있고 안될 이벤트를 기다리는 데 왜 바쁠까요? 비동기 적으로 수행하십시오. –

+0

@SriramSakthivel 비동기 적으로 수행하는 방법 – user3202862

+0

while을 제거하고 스레드를 계속 진행하십시오. 그런 다음 감시자의 '생성됨'이벤트를 처리하고 계속 진행합니다. 제공된 정보를 더 구체적으로 답변 할 수는 없습니다. –

답변

1

통화 중 루프를 사용하지 않으면 불필요하게 CPU를 먹게됩니다. 예를 들어 ManualResetEvent's WaitOne() method을 사용하여 대기 핸들을 사용할 수 있습니다.

ManualResetEvent _resetEvent; 

public void StartWatch() 
{ 
    // Start watching... 

    // Wait until signaled. 
    _resetEvent = new ManualResetEvent(false); 
    _resetEvent.WaitOne(); 
} 

void watcher_Created(object sender, FileSystemEventArgs e) 
{ 
    // Handle your file... 

    // And signal. 
    _resetEvent.Set(); 
} 
+0

감사합니다. 비 정적 (ManualResetEvent _resetEvent;) memebr에 액세스 할 수 없으므로 정적 단어 watcher_Created (개체 보낸 사람, FileSystemEventArgs e)에서 정적 단어를 제거해야했습니다. – user3202862