나는이 같은 뮤텍스를 사용하여 내 응용 프로그램에서 백그라운드 스레드가 있습니다뮤텍스 블록 UI 스레드
void bgWorker_DoWork(object sender, DoWorkEventArgs e)
{
MyMutex.MuImageLock.WaitOne();
foreach (var file in ImageFiles)
{
SyncFileToLocalImage(file.FileNameNoPath);
}
MyMutex.MuImageLock.ReleaseMutex();
}
을 그리고 동기화 2-3 분 정도 걸립니다. 이제는 내 응용 프로그램에 배경 스레드가 하나 더있어 동일한 작업을 수행합니다.
제 2 번째 스레드를 시작하기 전에 뮤텍스를 사용할 수 있는지 확인하고 싶습니다. 사용할 수 없다면 다른 스레드가 실행 중임을 의미하므로이 새 스레드를 시작할 필요가 없습니다. 그래서 내가 아래 코드를 사용하는지 확인해보십시오.
아래 코드를 사용하면 WaitOne
메서드는 이전 스레드가 뮤텍스를 해제하지 않을 때까지 내 UI 스레드를 차단합니다.
if (MyMutex.MuImageLock.WaitOne())
{
getPRImages();
MyMutex.MuImageLock.ReleaseMutex();
}
현재 UI 스레드를 차단하고 싶지 않습니다. 뮤텍스를 사용할 수 있는지 확인하고 싶습니다. 내가 어떻게 그럴 수 있니?
시간 초과를 허용하는 ['WaitOne'] (https://msdn.microsoft.com/en-us/library/cc189907(v=vs.110) .aspx) 오버로드를 사용할 수 있습니다. 타임 아웃을 밀리 초로 설정하고 반환 값에 따라 타임 아웃을 가져올 수 있는지 확인합니다. – vcsjones
차단을 피하려면 백그라운드 스레드에서 기다릴 수 있습니다. .net의 어떤 버전을 사용하고 있습니까? 당신이 무엇을 사용하고 있는지에 따라 다른 접근 방식이 있습니다. – Dbl
VS 2013을 사용하고 있습니다.뮤텍스가 출시되었을 때 해고 당할 수있는 이벤트가 있는지 알고 싶습니다. –