我正在用C#构建一个控制泵流量的设备控制器。 Form1和Pump-Class,保存泵的所有属性和方法,可通过表格访问。到目前为止,一切正常。但是,可能存在多个泵的情况。当然,我可以运行可执行文件的各个实例,但你知道..
如何根据我当前的需求创建泵级的多个实例。也许是一个带有Add-Button的额外表格,可以根据需要创建尽可能多的泵?
当然,这归结为一个非常基本的问题,但我不是专业程序员..任何评论都非常感谢。
提前致谢。
mulm
namespace PumpController
{
public partial class Form1 : Form
{
static Pump pump;
public Form1()
{
InitializeComponent();
cb_availablePorts.DropDownStyle = ComboBoxStyle.DropDownList;
cb_baudRates.DropDownStyle = ComboBoxStyle.DropDownList;
string[] availablePorts = SerialPort.GetPortNames();
foreach (string item in availablePorts)
{
cb_availablePorts.Items.Add(item);
}
string[] commonBaudRates = new string[] { "4800", "9600", "19200", "38400", "57600", "115200" };
foreach (string item in commonBaudRates)
{
cb_baudRates.Items.Add(item);
}
}
private void bt_valueUp_Click(object sender, EventArgs e)
{
if (!(pump == null))
{
pump.increaseValue();
}
}
private void bt_valueDown_Click(object sender, EventArgs e)
{
if (!(pump == null))
{
pump.decreaseValue();
}
}
private void Form_Closing(object sender, EventArgs e)
{
Hide();
if (!(pump == null))
{
pump.Close();
}
}
private void bt_connect_Click(object sender, EventArgs e)
{
if (!(cb_availablePorts.SelectedItem == null) && !(cb_baudRates.SelectedItem == null))
{
Pump pump = new Pump(Convert.ToString(cb_availablePorts.SelectedItem), Convert.ToInt32(cb_baudRates.SelectedItem));
}
}
}
}
答案 0 :(得分:1)
评论引出了部分答案,并且就他们而言是正确的。然而,一个重要的事情可能被忽略了 - 关于寻找(其他)COM端口的部分。
每次实例化new Pump
对象并将其添加到List<Pump>
集合时,除非您分配另一个端口,否则这些对象将争用相同的COM端口。
enumerating COM ports有一个广为接受的答案。讨厌提供一个链接作为我的答案的核心,但如果你有一个Pump
对象的四个对象列表竞争单个串口,你可能会遇到麻烦。