从 C# 表单调用现有的 class

Call an existing class from a c# form

我有一个很大的 public class 叫做 Telescope。我创建了一个新表单 (form1.cs),我想调用 class 具有的一些 public void。

我在表单中做了类似的事情来初始化 class

Telescope controls = new Telescope(); controls.CommandString("Gs#",true);

之后我可以看到所有的方法,但是执行失败,因为 class 已经初始化并且有一个现有的串口连接正在进行,所以它报告没有串口连接.

有什么帮助吗? 如何使用新表单中的现有方法?

Telescope class 在 Driver.cs

public string CommandString(string command, bool raw)
{
    CheckConnected("CommandString");
    serialPort.ClearBuffers();
    serialPort.Transmit(command);
    return serialPort.ReceiveTerminated("#");

}

当我在 Driver.cs(telescope class 所在的位置)中使用 CommandString 时,它起作用了。它不适用于 form1.cs

我遇到异常:

************** Exception Text ************** 
ASCOM.NotConnectedException: CommandString

理想情况下,您将使用某种 IoC 容器,而您的 class 将实现一个接口,其中包含与串行连接交互的最少方法。然后,IoC 容器会将实例的生命周期作为单例进行管理,并且在每次请求解析接口时都会将现有实例传回给您。

由于情况可能并非如此,并且由于只有单个实例可以访问串口,因此您可以将这些方法移至静态 class...但是当您开始共享静态方法时要小心,可能会出现意想不到的错误。 根据代码的结构,您可能只希望串行连接是静态的。

如何在 class 中实施的一个示例:

private Lazy<SerialConnection> _serialConnection =new Lazy<SerialConnection>(StaticClass.GetStaticSerialConnection);
public SerialConnection MySerialConnection
{
  get { return _serialConnection.Value; }
}

您应该在您的应用程序中的某处保留对 Telescope class 的第一个(也是唯一一个)实例的引用,然后通过该引用访问它。该引用可以保存在一些静态 class 中,您可以在那里初始化它并始终​​使用该静态 class.

调用它