我有一个名为Telescope
的大型公共课。我创建了一个新表单(form1.cs
),我想调用该类的一些公共空白。
我在表单中做了类似的事情来初始化类
Telescope controls = new Telescope();
controls.CommandString("Gs#",true);
之后我可以看到所有的方法但是它在执行失败,因为类已经初始化并且现有的串口连接正在进行中,因此它报告没有串口连接。
有任何帮助吗? 如何使用新表单中的现有方法?
望远镜类在Driver.cs
中public string CommandString(string command, bool raw)
{
CheckConnected("CommandString");
serialPort.ClearBuffers();
serialPort.Transmit(command);
return serialPort.ReceiveTerminated("#");
}
当我在Driver.cs中使用CommandString(望远镜类所在的位置)时,它可以工作。它不适用于form1.cs
我得到一个例外:
************** Exception Text **************
ASCOM.NotConnectedException: CommandString
答案 0 :(得分:0)
理想情况下,您将使用某种IoC容器,您的类将实现一个包含与您的串行连接接口的极小方法的接口。然后,IoC容器将实例的生命周期作为单例进行管理,并且在解析接口的每个请求上都会将您传回现有实例。
由于情况可能并非如此,并且由于只有一个实例可以访问串行端口,因此可以将这些方法移动到静态类中......但是请注意,当您开始共享静态方法时,可能会出现意外错误。 根据代码的结构,您只希望串行连接是静态的。
如何在课堂上实现这一点的一个例子:
private Lazy<SerialConnection> _serialConnection =new Lazy<SerialConnection>(StaticClass.GetStaticSerialConnection);
public SerialConnection MySerialConnection
{
get { return _serialConnection.Value; }
}
答案 1 :(得分:0)
您应该在应用中的某个位置保留对您的第一个(也是唯一的)Telescope类实例的引用,然后通过该引用访问它。引用可以保存在某个静态类中,您可以在那里初始化它,并始终使用该静态类调用它。