質問するログイン新規登録

回答編集履歴

5

refine

2015/03/05 08:30

投稿

yohhoy
yohhoy

スコア6191

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

4

refine

2015/03/05 08:30

投稿

yohhoy
yohhoy

スコア6191

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

3

fix

2015/03/05 08:27

投稿

yohhoy
yohhoy

スコア6191

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

2

refine

2015/03/05 08:07

投稿

yohhoy
yohhoy

スコア6191

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

1

GC.KeepAlive詳細に言及

2015/03/05 08:06

投稿

yohhoy
yohhoy

スコア6191

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