从 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.
调用它
我有一个很大的 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.
调用它