回答編集履歴

5

refine

2015/03/05 08:30

投稿

yohhoy
yohhoy

スコア6191

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

2015/03/05 08:30

投稿

yohhoy
yohhoy

スコア6191

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

2015/03/05 08:27

投稿

yohhoy
yohhoy

スコア6191

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

2015/03/05 08:07

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- `GC.KeepAlive`が必要になる理由は、「GCにかってに`mutex`破棄されないよう指示するためです。これがないと、アプリケーション本体処理実行中に`mutex`が破棄されることがあり、別プロセスでミューテックスを作れるようになってしまい、結果的に多重起動の防止に失敗することがあります。
5
+ `GC.KeepAlive`が必要になる理由は、「GCが勝手に`mutex`破棄ないよう指示するためです。これがないと、アプリケーション本体処理実行中に`mutex`が破棄されることがあり、別プロセスでミューテックスを作れるようになってしまい、結果的に多重起動の防止に失敗することがあります。
6
6
 
7
7
 
8
8
 

1

GC.KeepAlive詳細に言及

2015/03/05 08:06

投稿

yohhoy
yohhoy

スコア6191

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
+