回答編集履歴
5
refine
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
`GC.KeepAlive`が必要になる理由は、「GCが勝手に`mutex`を破棄しないよう指示する」ためです。これがないと、アプリケーション本体処理実行中に`mutex`が破棄されることがあり、別プロセスで
|
5
|
+
`GC.KeepAlive`が必要になる理由は、「GCが勝手に`mutex`を破棄しないよう指示する」ためです。これがないと、アプリケーション本体処理実行中に`mutex`が破棄されることがあり、別プロセスで`mutex.WaitOne`が`True`を返せる状態となってしまい、結果的には多重起動抑止に失敗します。
|
6
6
|
|
7
7
|
|
8
8
|
|
4
refine
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
[VB.NET - 二重起動を確実に禁止する](http://jeanne.wankuma.com/tips/vb.net/process/mutex.html) で紹介されてているように、`End If`に続く本体処理よりも**後ろ**に`GC.KeepAlive(mutex)`が必要です。(あと`mutex.Close()`も)
|
1
|
+
[VB.NET - 二重起動を確実に禁止する](http://jeanne.wankuma.com/tips/vb.net/process/mutex.html) で紹介されてているように、`End If`に続く本体処理よりも**後ろ**、つまりアプリケーションの**終了直前に**`GC.KeepAlive(mutex)`が必要です。(あと`mutex.Close()`も)
|
2
2
|
|
3
3
|
|
4
4
|
|
3
fix
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
[VB.NET - 二重起動を確実に禁止する](http://jeanne.wankuma.com/tips/vb.net/process/mutex.html) で紹介されてているように、`End If`より後ろに`GC.KeepAlive(mutex)`が必要です。(あと`mutex.Close()`も)
|
1
|
+
[VB.NET - 二重起動を確実に禁止する](http://jeanne.wankuma.com/tips/vb.net/process/mutex.html) で紹介されてているように、`End If`に続く本体処理よりも**後ろ**に`GC.KeepAlive(mutex)`が必要です。(あと`mutex.Close()`も)
|
2
2
|
|
3
3
|
|
4
4
|
|
2
refine
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
`GC.KeepAlive`が必要になる理由は、「GCに
|
5
|
+
`GC.KeepAlive`が必要になる理由は、「GCが勝手に`mutex`を破棄しないよう指示する」ためです。これがないと、アプリケーション本体処理実行中に`mutex`が破棄されることがあり、別プロセスでミューテックスを作れるようになってしまい、結果的に多重起動の防止に失敗することがあります。
|
6
6
|
|
7
7
|
|
8
8
|
|
1
GC.KeepAlive詳細に言及
test
CHANGED
@@ -3,3 +3,9 @@
|
|
3
3
|
|
4
4
|
|
5
5
|
`GC.KeepAlive`が必要になる理由は、「GCにかってに`mutex`が破棄されないよう指示するため」です。これがないと、アプリケーション本体処理実行中に`mutex`が破棄されることがあり、別プロセスでミューテックスを作れるようになってしまい、結果的に多重起動の防止に失敗することがあります。
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
[GC.KeepAliveメソッド](https://msdn.microsoft.com/ja-jp/library/system.gc.keepalive.aspx) の働きは、「対象オブジェクトをルーチン開始時から同呼び出しまでGC対象からはずす」となっていますが、直感的には理解しづらいかもしれません(私も最初は何を言ってるのか理解できなかったので)。
|
10
|
+
|
11
|
+
|