【问题标题】:How to not open multiple windows at the same time for CAM interfaceCAM界面如何不同时打开多个窗口
【发布时间】:2017-06-12 12:56:40
【问题描述】:

我正在为 CAM/CAD 软件编写插件/界面,并使用此代码打开“SaveWindow”。

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();
  }

如果有一个接口打开,我再次点击插件按钮,它会打开另一个多个。如果第一个是打开的,我如何编码不打开第二个。

【问题讨论】:

  • 最好是询问支持,因为您可能缺少某种“独家”插件选项。否则,您可以尝试 IPC 同步,例如named mutex.

标签: c# winforms button plugins


【解决方案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
}

在这种情况下,问题是在满足您的条件但您的窗口打开的情况下您想做什么?

只需像这样将isOpen 检查添加到您打开的窗口路径中

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

这意味着只要您的条件得到满足并且窗口已经打开,您的代码就会“做其他事情”。

另一种方法是这样的

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

这意味着当您的条件满足时,如果窗口未打开,则打开窗口,如果窗口打开,则执行其他操作。那么您的第三种情况是条件不满足时的第二种“做其他事情”路径。

【讨论】:

  • @谢谢加雷斯。问题已解决。我没有正确解释它,但我想通了。无论如何,谢谢你的回答。
猜你喜欢
  • 1970-01-01
  • 2015-09-13
  • 2016-03-06
  • 2021-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多