私はデスクトップアプリ(C#4.0 Winforms)を開発していますが、その要件の1つは、プログラムを複数回開くことができることです。ただし、ユーザーが特定のドキュメントを複数回開くことができないようにする必要があります(悪いことが起こる可能性があります)。
基本的に、MS Word(少なくとも新しいバージョン)と同じように機能させたいと思います。すでに開いているドキュメントを開こうとすると、そのドキュメントがすでに開いているプログラムのインスタンスに移動します。
私はほとんどの時間をWeb開発に費やしているので、私が知らない簡単な解決策があるかもしれません。
ですから、私には2つの異なるニーズがあります。
1)ファイルが複数回開かれないようにします。2)ファイルを再度開こうとした場合は、インスタンスを前面に移動します。
#1を処理する方法はいくつか考えられますが、他の人がこの問題をどのように解決したのか興味があります。
開いたままで子プログラムを作成するマスターフォーム/プロセスを作成せずに、#2を機能させるためにどこから始めればよいのか、実際にはまったくわかりません。IEは、現在のプログラムのメインフォームの開閉を実際に制御する別のフォームを作成するため、実際の複数ウィンドウのエクスペリエンスというよりも「タブ付き」のエクスペリエンスになります。古いスタイルのMDIに似ています(これでも問題#1が残ります)。
ここでのヘルプ(読むサイト、見る名前空間など)をいただければ幸いです。
編集-これは重複としてマークされており、「重複」がページの上部にあることがわかります。私の要件の1つは、プログラムを複数回開くことができる必要があることです。皆さんも投稿を読みましたか?他の誰かが入って投票して質問を再開できますか?
さらに編集-プログラムが同じドキュメントを何度も開かないようにするために、Mutexのアイデアを採用しました。プログラムのどのインスタンスでドキュメントが開いているかを簡単に見つけて前面に表示する方法が見つからなかったので、今はあきらめて、すでに開いていることを示すメッセージボックスを表示します。名前付きパイプは、私がやりたいことではなく、多くのオーバーヘッドを伴うため(WCFは世界で最も簡単なことではありません)、これには少しやり過ぎのように見えました。