2017-10-13 13 views
-1

현재 이미지 배치를 처리하고 PDF에 넣으려면 C#으로 작은 응용 프로그램을 작성하고 있습니다. 이미지의 각 배치는 네트워크 공유의 자체 폴더에 저장됩니다. 이 응용 프로그램을 사용하면 PDF를 만들기 전에 단일 배치에서 임의의 수의 이미지에 대해 QA 검사를 수행 할 수 있습니다. 최대 4 ~ 6 명의 사용자가 개별 데스크톱에서이 애플리케이션을 실행하여 이미지 배치가 저장된 위치에 액세스 할 수 있습니다.여러 사용자가 동일한 폴더에 액세스하는 것을 방지합니다. C#

내가 지금 실행중인 문제는 2 명의 사용자가 동일한 배치를 처리하지 못하게하는 방법입니다. 처음에는 FileSystemWatcher를 사용하여 각 폴더에 마지막으로 액세스했는지 확인했지만 FileSystemWatcher가 적절하지 않은 이벤트를 발생시키는 방법을 읽었습니다. 필자는 파일 탐색을 사용하여 파일 액세스를 위해 각 폴더의 이미지를 검사하기 위해 폴링을 사용해 봤지만 적합하지 않다고 생각합니다.

가장 간단한 해결책은 무엇입니까?

+0

네트워크 드라이브에 직접 액세스하지 못하게하십시오. 단일 사용자 만 폴더의 이미지에 액세스 할 수있는 것을 통해이를 프록시하십시오. – TZHX

+0

폴더에 'bob.lock' 파일을 작성하여 폴더 처리를 시작하기 전에 처리중인 폴더임을 표시하고 완료되면 삭제하십시오. _ 기계가 충돌했는지 여부를 감지하고 수동으로 잠금 파일을 삭제하는 메커니즘을 고려해야 할 수도 있습니다 ._ – mjwills

답변

0

this과 같은 패키지에 잠금 파일을 사용하고 싶습니다.

코드는 매우 간단합니다 : (영원히 잠겨 유지하지 않도록)를 사용하여 프로세스가 충돌하는 경우 timeout이 폴더의 잠금을 해제하는 데 사용됩니다

var fileLock = new SimpleFileLock("networkFolder/file.lock", TimeSpan.FromMinutes(timeout)); 

.

그런 다음, 매번 프로세스는 간단한 체크로 이동, 그 디렉토리를 사용해야합니다 :

if (fileLock.TryAcquireLock()) 
{ 
    //Lock acquired - do your work here 
} 
else 
{ 
    //Failed to acquire lock - SpinWait or do something else 
} 

코드가 REPO에 샘플에서 가져온 것입니다, 즉 저자가 자신의 라이브러리를 사용하여 제안하는 방식 그래서.

나는 그것을 사용할 수있는 기회가 있었으며 유용하고 신뢰할 수 있다는 것을 발견했다.