@lazyberezovskyは正しいです。コマンドラインからアプリケーションを再度呼び出すと、関連のない別のプロセスが生成され、呼び出されている新しいプロセスを終了する前に、プロセス間通信で新しいパラメーターを以前に実行していたアプリインスタンスに転送する必要があります。
IMHO、これら2つのプロセス間で通信する最も簡単な方法(確かに最善ではありません)は、Windowsレジストリを使用することです。これは、すでにスレッドセーフであり、APIが非常に単純だからです。
まず、アプリケーションの実行時に、メインフォームを表示する前に、アプリの別のインスタンスが実行されているかどうかを確認するためのチェックを実行します。
falseの場合、アプリが初めて実行され、コマンドラインを処理してフォームを通常どおりに表示します。プロセス間通信に使用されるレジストリキーもクリアします(以下を参照)。
trueの場合、プロセス間通信に役立つ特定のキーのレジストリにコマンドラインを保存し、メインフォームを表示せずにアプリケーションを終了します。
実行中のアプリケーション(最初のインスタンス)は、新しいコマンドラインが必要なレジストリキーを定期的に検査するポーリングメカニズム(1秒に1回起動するWindowsタイマーの場合もあります)を開始する必要があります。通常は文字列を見つけて空にし、何もしませんが、取得した値が空でない場合は、ユーザーが別のパラメータセットを使用してアプリケーションを再度生成したことを意味します。その後、コマンドラインをデコードしてウィンドウを再描画できます。必要に応じて。この後、レジストリエントリを再度クリアして、ポーリングメカニズムが再開し、次にユーザーがアプリケーションを呼び出したときに検出できるようにしてください。
名前付きパイプ、WCF、.remoting、またはTCPソケットは、使用できるIPCメカニズムであり、ポーリングメカニズムを必要としないため、一部の人は眉をひそめる可能性があります。;)
お役に立てれば!