この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 22992|答える: 2

[出典] 1つのインスタンスしか動作できないC#プログラムの問題を解決するいくつかの詳細な説明

[リンクをコピー]
掲載地 2016/12/08 13:11:13 | | |

方法1:
スレッドミューテックス変数を使いましょう。 インスタンスが実行されているかどうかを判別するためにミューテックス変数を定義します。
program.csファイルのMain()関数を以下のコードに変更します:




注:プログラム内の文 System.Threading.Mutex run = new System.Threading.Mutex(true, "single_test", out runone); ミューテックス変数の実行を作成するために、「single_test」がミューテックス名となり、このメソッドが返ってくると、ローカルミューテックスまたは指定された命名システムのミューテックスが作成されると、ブール値のrunoneは真となります。 指定された命名システムのミューテックスがすでに存在する場合は、falseとなります。 名前付きミューテックスはシステム全体に適用されます。
方法2:プロセスを判断する方法を使い、プログラムを実行する前に同じ名前のプロセスが存在し、実行位置も同じプロセスかどうかを確認します。 C#のSystem.Diagnostics名前空間のProcess クラスを適用して実装します。メインコードは以下の通りです。
1. program.csファイルに関数を追加する:




2. メイン()関数を以下のコードに変更する:




方法3:グローバルアトミックメソッド。プログラムを作成する前に、まずグローバルアトミックテーブルで特定のアトムA(作成時に追加されたもの)があるか確認し、存在したら作成を停止します。これはプログラムがインスタンスを実行したことを示します。 存在しなければ、プログラムを実行して特定の原子Aをグローバル原子テーブルに追加し、 プログラムを終了する際は、特定の原子Aを解放することを忘れないでください。そうでなければ、コンピュータの電源が切られるまで放出されません。 C#の実装は以下の通りです:
1. WinAPI関数インターフェースを宣言する

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
public static extern UInt32 GlobalAddAtom(String lpString); 原子を加える
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
public static extern UInt32 GlobalFindAtom(String lpString); 原子を見つける
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
public static extern UInt32 GlobalDeleteAtom(UInt32 nAtom); 原子を削除
2. Main()関数を以下のように修正します:




3. FormClosed イベントに以下のコードを追加します:
GlobalDeleteAtom(GlobalFindAtom("jiaao_test")); 原子「jiaao_test」を削除してください
--------------------------------------*-------*--------*-----------------------------------------------
上記は相互排他的プログラムを作るという基本的な考え方であり、個人的には最初の方法が最もシンプルだと思います。




先の:Directory.GetCurrentDirectory と Application.StartupPath の違い
次に:.Net Framework4と.Net Framework4.0クライアントプロファイルの違い
掲載地 2017/07/10 6:31:21 |
共有してくれてありがとう
 地主| 掲載地 2024/07/23 14:21:04 |
C#プログラムは正しいコードを実行できるインスタンスを1つだけ許可します
https://www.itsvse.com/thread-3391-1-1.html
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com