2

音楽プレーヤーを作ろうとしています。

mp3 ファイルをクリックするとアプリケーションで開きますが、別の mp3 ファイルをクリックするとアプリケーションが再び開きます。アプリケーションが既に実行されているかどうかを確認するコードが必要です。実行されている場合は、新しいアプリケーションを開かないで、新しい mp3 ファイルの名前を既に開いているアプリケーションに送信します。

次のコードを使用して、アプリケーションが実行されているかどうかを確認しています。

string processName = Path.GetFileNameWithoutExtension(
    Assembly.GetEntryAssembly().Location);

if(Process.GetProcessesByName(processName).Count() > 1) 
    return;

ここで、新しい mp3 ファイル パスを既に実行中のアプリケーションに送信する必要があります。たとえば、Windows Media Player や Gom Player にはこの機能があります。

4

4 に答える 4

4

GetProcessesByName の代わりに名前付きミューテックスをお勧めします。とにかくミューテックスを取得したら、Remoting サーバーを起動します。ミューテックスを取得できない場合は、リモートクライアントを起動し、そのサーバー (最初に実行されているアプリケーション) に接続し、それを使用してサーバー上のメソッドを呼び出します。

ここに MSDN サンプルがあります: http://msdn.microsoft.com/en-us/library/ms771662(v=VS.90).aspx

于 2013-06-23T17:18:28.067 に答える
0

複数の方法で、同じマシン上のアプリ間で通信できます。スレッディング、WCF(適切なプロトコルを使用)など。これらをグーグルで検索するだけで、ファイルへのパスを書き込み、メインアプリが1秒ごとに同じ場所のファイルを読み取るなど、醜いものを作成することもできます。(新しい mp3 ファイルへの) パスがある場合。メインアプリはそれを再生し、パスを削除してチェックを続けます。

于 2013-06-23T17:18:20.927 に答える
0

2 つのプロセス間で通信するには、いくつかの方法があります。

.NET リモート処理: http://msdn.microsoft.com/en-us/library/kwdt6w2k(v=vs.71).aspx

WCF: http://msdn.microsoft.com/en-us/library/dd456779.aspx

...

「check-if-instance-is-already-running」を渡した後、外部呼び出しを待っているリスナーを開始します。チェックが失敗した場合は、引数を渡してリスナーを呼び出すクライアントを起動します。このようにして、たとえば再生/一時停止コマンドをアプリケーションに送信するトレイ アイコンを設定することもできます。

于 2013-06-23T17:18:49.647 に答える