2016-11-01 2 views
0

FileSystemEventHandler이 있는데 onchange은 내 파일에서 데이터를 읽었으므로 이제 처리기로 작업하면서이 데이터를 반환해야합니다. 이제 내 코드는 작동하지만 아무 것도 반환하지 않으므로 프런트 엔드에 업데이트 된 데이터가 없습니다. 이것이 내 질문입니다. data을 어떻게 돌려 보낼 수 있습니까?FileSystemWatcher Onchage 반환 값

감사

public static string data = null; 
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")] 
public static string Run() 
{ 
    try 
    { 
     // Create a new FileSystemWatcher and set its properties. 
     FileSystemWatcher watcher = new FileSystemWatcher(); 
     //watcher.Path = System.IO.Directory.GetCurrentDirectory(); 
     watcher.Path = Path.Combine(HttpRuntime.AppDomainAppPath, "view"); 
     /* Watch for changes in LastAccess and LastWrite times, and 
      the renaming of files or directories. */ 
     watcher.NotifyFilter = NotifyFilters.LastWrite 
      | NotifyFilters.FileName | NotifyFilters.DirectoryName; 
     watcher.Filter = "info.txt"; 

     // Add event handlers. 
     watcher.Changed += new FileSystemEventHandler(OnChanged); 

     // Begin watching. 
     watcher.EnableRaisingEvents = true; 
    } 
    catch (Exception ex) 
    { 
     Console.Write(ex.ToString()); 
    } 
    return data; 

} 

private static void OnChanged(object source, FileSystemEventArgs e) 
{ 
    data = FileManager.Read(); 
} 
+0

'OnChanged()'가 발생할 때까지'Run()'을 차단하겠습니까? – CodeCaster

+0

'OnChanged' 이벤트가 발생하여'data'를 설정하기 오래 전에 run 메소드가 data == null로 리턴됩니다. – ChrisF

+0

'Run()'을 막을 필요가 없다면, ui를 업데이트하기 위해 데이터를 리턴한다고 기대하면 안됩니다. 'OnChanged()'또는 직접 OnChanged()에서 호출해야하는 다른 메소드에서 사용자의 ui를 업데이트해야합니다. 그러면 사용자가 데이터를 읽을 것입니다. – IamNguele

답변

0

FileSystemWatcher은 이벤트 구동 메커니즘입니다. Run() 메서드에서 아무 것도 반환하지 않아도됩니다. OnChanged() 이벤트 처리기에서 변경 한 결과로 원하는 작업을 수행해야합니다. API for FileSystemEventArgs을 살펴보십시오.

[PermissionSet(SecurityAction.Demand, Name = "FullTrust")] 
public static void Run() 
{ 
    try 
    { 
     // Create a new FileSystemWatcher and set its properties. 
     FileSystemWatcher watcher = new FileSystemWatcher(); 
     //watcher.Path = System.IO.Directory.GetCurrentDirectory(); 
     watcher.Path = Path.Combine(HttpRuntime.AppDomainAppPath, "view"); 
     /* Watch for changes in LastAccess and LastWrite times, and 
      the renaming of files or directories. */ 
     watcher.NotifyFilter = NotifyFilters.LastWrite 
      | NotifyFilters.FileName | NotifyFilters.DirectoryName; 
     watcher.Filter = "info.txt"; 

     // Add event handlers. 
     watcher.Changed += new FileSystemEventHandler(OnChanged); 

     // Begin watching. 
     watcher.EnableRaisingEvents = true; 
    } 
    catch (Exception ex) 
    { 
     Console.Write(ex.ToString()); 
    } 
} 


private static void OnChanged(object source, FileSystemEventArgs e) 
{ 
    string fileText = File.ReadAllText(e.FullPath); 
    // do whatever you want to do with fileText 
} 
+0

에 저장되어야합니다. 어떻게하면 데이터를 반환 할 수 있습니까?이 경우 핸들러는 호출되지 않습니다. – lol

+0

변경이 발생할 때'FileSystemWatcher'가 당신을 위해'OnChanged()'를 호출 할 것입니다. 변경의 결과로 처리기에서 원하는 작업을 수행하는 것은 사용자의 몫입니다. 예를 들어 핸들러에서 직접 UI를 업데이트 할 수 있습니다. –