MUTEXによるプロセス間の排他制御。MUTEX使うの10年ぶりだ…ということでメモ。
Sub Main() Dim _mutex As System.Threading.Mutex ' 取得 _mutex = New System.Threading.Mutex(False, "LockName") _mutex.WaitOne() ' 処理 MsgBox("処理中") ' 解放 _mutex.ReleaseMutex() _mutex.Close() End Sub
今回初めて知りましたが、mutexはセッション毎にできるらしい、つまり、リモートデスクトップとローカルとでは排他できないとのこと。実際に確認してみたら、リモートデスクトップとローカルとでそれぞれ取得できました…
セッション共通でmutexを使いたい場合は、"Global"を先頭にいれたらよいらしい。しかしmutexを作成する(New)の段階で例外(System.UnauthorizedAccessException)が出るようになるので、実際に使用する場合にはお手当てする必要がありそうです。