는 :잠금 및 동기화
public void InitList(object source, FileSystemEventArgs f)
{
if (!Monitor.TryEnter(lockObject))
{
Monitor.Exit(lockObject);
return;
}
try
{
/// do something
}
catch (Exception e)
{
MessageBox.Show("The Process Failed:" + e.ToString());
}
finally
{
Monitor.Exit(lockObject);
_watcher.Path = textBox2.Text;
_watcher.EnableRaisingEvents = true;
}
}
나는 FileStreams를 가지고,하지만 난 제대로들을 폐쇄하고있다. 나는 그것들이 문제가 아니라고 믿는다.
프로그램을 처음 실행할 때 예외가있는 캐치로 이동합니다. File cannot be accessed.
두 번째 파일을 디렉터리로 복사하면 object synchronization method was called from an unsynchronized block of code
이 표시됩니다. 이 예외는 monitor.exit(lockobject)
에 있습니다.
내 프로그램, 그리고 내가 무엇을 달성하려고 해요에 대한 거친 IDEA :
FileSystemWatcher 구성 실행, 그것을 집어 때 파일 내가이 파일을 처리하고 UI (목록 상자)에 그것을보고 변경된이있다 . 내가 본 예외를 일으킬 수있는 것을 설명해 주시겠습니까?
FSW 이벤트가있는 파일을 읽을 수있는 경우는 거의 없습니다. 다른 프로세스가 파일을 수정하는 중입니다. 프로세스가 파일을 닫을 때까지 임의로 오래 기다려야합니다. 모니터를 얻지 못했을 때 Monitor.Exit()을 호출하는 것은 명백한 버그입니다. –
파일을 제어하는 백그라운드에서 실행중인 다른 프로세스는 없습니다. 왜냐하면 나는 단순히 파일을 폴더에 복사/붙여 넣기하기 때문입니다. 그래서 FSW가 발동했을 때. 그것은 4 이벤트 (msdn fsw 매뉴얼에 따라)를 발사하고, 이제는 그 4 개를 제압하고 단 한 번에 들어올 논리가 있습니다. 하지만 내 자물쇠가 제대로 작동하지 않는 것 같습니다. – user726720
당신이 검사하고 싶다면 여기에 내 코드가있다 : http://pastebin.com/DyqACh9g – user726720