【问题标题】:I have to use a serial port that is shared across two UIs in C# .NET 4.5 [closed]我必须使用在 C# .NET 4.5 中的两个 UI 之间共享的串行端口 [关闭]
【发布时间】:2017-06-08 20:15:39
【问题描述】:

我有一个 C# 应用程序,它在启动时会打开两个 GUI。 其中一个 GUI 打开三个虚拟 COM 端口。我希望作为同一应用程序一部分的其他 GUI 显示在这些虚拟 COM 端口上发送的数据。无论如何要共享我在打开的主/第一个 GUI 中所做的这个 COM 端口声明。

【问题讨论】:

  • 您可以在不创建它们的窗口的ctor 中传递对它们的引用。我不记得 2 个窗口是否使用相同的 UI 线程,但如果它们不共享一个公共线程,您可能需要对它们进行 Invoke() 操作。
  • @PeteGarafano 对于每个进程,至少在 .net 中只有一个 UI 线程
  • 您的第一句话是否意味着您有一个必须在两个表单之间共享数据的 WinForm 应用程序?咨询Passing data between forms
  • 感谢@Gusman,这应该可以简化为在第一个窗口构造对象后将其传递给一个窗口。

标签: c# .net user-interface serial-port virtual-serial-port


【解决方案1】:

三种方式:

1) 将连接实例从 Window1 复制到 Window2。

window2.Connection = this.Connection;

2) 将连接设为公共静态成员

class Window1 : Window
{
   public static SerialConnectionClass Connection { get; set; } = new SerialConnectionClass();
}

你可以这样访问连接:

class Window2 :Window
{
...
   private void func()
   {
      Window1.Connection.Send("");
   }
}

3) 制作静态 ConnectionManager

static class ConnectionManager
{
    public static SerialConnectionClass Connection { get; set; } = new SerialConnectionClass();
    public static EventHandler MessageReceived;
    public static void Send(string text)
    {
        Connection.Send(text);
    }
    ...
}

像这样在 Window1 和 Window2 中使用它:

class Window2 :Window
{
...
   private void func()
   {
      ConnectionManager.init("COM1");
      ConnectionManager.MessageReceived += this.MessageReceived;
      ConnectionManager.Send("test123");
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多