2012-04-02 5 views
0

...DLLからのダイアログフォームが起動され、開いているかどうかはどのように知ることができますか?私はなど、私たちのアセンブリのさまざまな部分でそれを呼び出すと、別のプロジェクトへのアクセスを取得し、そのメソッドを呼び出すことができるように、私は静的クラスを作成した再利用可能なアセンブリで

public static class CommentViewerHelper 
{ 
    static CommentViewerHelper() 
    { 
     CommentViewer = new CommentViewer(); 
    } 

    /// <summary> 
    /// Gives access to PCSCommentViewer public methods and properties. 
    /// </summary> 
    public static CommentViewer CommentViewer { get; private set; } 
} 

このCommentViewerプロジェクトましたユーザーがコメントなどを入力できるようにフォーム 私の問題は、ユーザーがこのCommentViewerプログラムを実際に開いたかどうかをどのように知ることができるかです。私が欲しいときはいつでもそのメソッドを呼び出すことができますが、最初にそのプログラムが開いているかどうかを知る方法はありますか?

+1

あなたが同じマシン上の別のアプリケーションから知ることができますどのようにあなたが意味ですか?別のマシン上の別のアプリケーションですか?どうか明らかにしてください。 – David

+0

ユーザがダイアログを開いたり閉じたりしても問題はありませんか?それとも今開いているだけですか? – Jay

+0

これらは、Citrixボックス上の別々のDLLです。同じマシンです。 – Bohn

答えて

3

フォームが開いているかどうかを確認するには、IsHandleCreatedプロパティを使用します。

一方、最初に他のフォームを開始するコードを記述した場合、それが起こったかどうかは分かりませんか?

2

私はあなたが達成しようとしていることは何度も呼び出されても何度もダイアログの内容を(再)読み込まないことだと思います。あなたは "遅延ロード"を使ってそれを行うかもしれません。

文字列ビルダの参照を作成し、nullに設定します。参照がnullの場合、初期化で文字列ビルダーオブジェクトを作成し、その中にコンテンツをロードします。ヌルでない場合は、コンテンツがすでに取得されていることがわかり、単に文字列ビルダーを使用できます。

+0

素敵なトリック。ありがとう – Bohn

0

フォームを自分で作成した場合は、AppDomainなどのクエリに問題はありません。

あなたはこのような何かを試みることができる.NETアプリケーションの情報にアクセスするには直接的な手段を持っていない場合:

using System.Diagnostics; 
private bool ApplicationExists(string appName) 
{ 
    foreach (Process currentProcess in Process.GetProcesses(".")) 
    { 
     if (currentProcess.MainWindowTitle.Length == appName) 
     { 
      return true; 
     } 
    } 
    return false; 
} 
関連する問題