回答編集履歴

1

説明をわかりやすく修正

2024/05/31 00:24

投稿

hqf00342
hqf00342

スコア360

test CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  提示コードで2クリック目も起動する理由はMutexの仕様のためです。
4
4
 
5
- 2回目クリック後に通るWaitOne()はMutex取得済のため、falseが返ることを期待するコードに見えますが、これは同一スレッドからの要求なのでtrueになります。これは[公式ドキュメント](https://learn.microsoft.com/en-us/dotnet/api/system.threading.mutex?view=net-8.0)にこう書かれてます。
5
+ 2回目クリック後に通るMutex.WaitOne()は取得済のため、falseが返ることを期待するコードに見えますが、同一スレッドからの要求なのでtrueになります。これは[公式ドキュメント](https://learn.microsoft.com/en-us/dotnet/api/system.threading.mutex?view=net-8.0)にこう書かれてます。
6
6
  >The thread that owns a mutex can request the same mutex in repeated calls to WaitOne without blocking its execution. However, the thread must call the ReleaseMutex method the same number of times to release ownership of the mutex.
7
7
  >(意訳)Mutexを所有するスレッドは、繰り返しWaitOne() を呼び出して同じMutexを要求できる。ただし、Mutex所有権を解放するには、ReleaseMutex() をWaitOne()した回数だけ呼び出す必要がある。
8
8
 
9
- そのため、自プログラムからの(複数クリックによる)多重起動抑制はMutexとは別の方法で管理する必要があるということになります。
9
+ そのため、自プログラムからの(複数クリックによる)多重起動抑制は別スレッドでチェックするか、Mutexとは別の方法で管理する必要があるということになります。
10
10
 
11
11
  提示コードをすこしだけ手直しした案を書いておきます。
12
12