2017-06-12 12 views
0

CAM/CADソフトウェア用のプラグイン/インターフェイスを作成していますが、このコードを使用して「SaveWindow」を開きます。CAMインターフェイス用に複数のウィンドウを同時に開かない方法

public void Run(string theMode) 
    { 
    try 
    { 
     if (theMode == "SaveWindow") 
     { 
      string aPictureString = GetPictureString(); 
      StartInterface(null, theMode, CreateAndSaveTheToolList(aPictureString)); 
     } 
     else 
     { 
      string aPipeId = GetRandomString(); 
      itsServerStream = new NamedPipeServerStream(aPipeId, PipeDirection.In, 1); 
      ThreadPool.QueueUserWorkItem(this.ListenToStream); 
      StartInterface(aPipeId, theMode, ""); 
      StartNamedPipe(aPipeId); 
      itsRefreshThread = new Thread(this.RefreshTools); 
      itsRefreshThread.Start(); 

      if (!InitLogger(Path.GetDirectoryName(this.GetType().Assembly.Location))) 
      { 
       MessageBox.Show(//Secured code); 
       return; 
      } 
     } 
     itsLogger.Info("Run execute was successful."); 
    } 
    catch (Exception aException) 
    { 
     //Secured code 
    } 
    LogManager.ResetConfiguration(); 
    } 

インターフェイスが開いていて、もう一度プラグインボタンをクリックすると、別の複数のものが開きます。最初のコードが開いていれば、2番目のコードを開かないようにするにはどうすればよいですか?

+0

最高ののは、「独占」プラグインオプションのいくつかの種類が不足している可能性があるためです。それ以外の場合は、IPC同期を試すことができます。 [名前付きミューテックス](https://stackoverflow.com/q/2186747/1997232)。 – Sinatr

答えて

1

あなたの現在の状況は

if (condition) 
{ 
    // Open your window 
} 
else 
{ 
    // Do something else 
} 

のようなものだから、あなたはあなたの条件を満足するたびに、あなたの窓の別のインスタンスが開かれています。

あなたはあなたの窓は、すでにあなたの条件が満たされているが、あなたの窓が開いているあなたは何をしたいと思い際に問題が状況である。この場合には、この

bool isOpen = false; 

if (!isOpen) 
{ 
    // The window isn't open so open it 
    isOpen = true; 
} 
else 
{ 
    // The window is already open so don't open it again 
} 

のように開いているかどうかをチェックすることにより、この問題を回避することができます何をする?

は、単にあなたの条件が満たされていると、すでにあなたのコードを開いているウィンドウは、「何かを行います」になるたびことを意味します。この

if (condition && !isOpen) 
{ 
    // Open your window 
    isOpen = true; 
} 
else 
{ 
    // Do something else 
} 

のように開いているウィンドウのパスにisOpenチェックを追加します。

別のアプローチは、これはあなたの条件が満たされたとき、それは開いていない場合は、ウィンドウを開くことを意味し、それがある場合は、他の何かをこの

if (condition) 
{ 
    if (!isOpen) 
    { 
     // Open your window 
     isOpen = true; 
    } 
    else 
    { 
     // Do something else 
    } 
} 
else 
{ 
    // Do something else 
} 

のようなものです。次に、条件が満たされていない場合の2番目の「Do something else」パスが3番目のケースです。

+0

@Thanks Gareth。問題は解決されました。私はそれを正しく説明しなかったが、私は考え出した。とにかく、あなたの答えをありがとう。 – rapsoulCecil

関連する問題