c#中一个类打开串口,另一个类发送串口数据怎么弄

请注意类就是c#的form。这个有点晕了。
public EchosounderTester(EchoSounder form1, RS232Module rs232Module)//回波测试
{
this.rs232Module = rs232Module;
this.form1 = form1;
}
这个rs232Module有什么用??
public MsgDispatcher(Transducer form)
{
this.form = form;
rs232Module = new RS232Module();

protocol = new Protocol();

transducerTest = new TransducerTest(form, rs232Module);
// echosounderTester = new EchosounderTester(form, rs232Module);

// used only for testing
/*
System.Timers.Timer testTimer = new System.Timers.Timer();
testTimer.Elapsed += new ElapsedEventHandler(OnTestTimerEvent);
testTimer.Interval = 10;
testTimer.Enabled = true;
*/
}
这个里面调用了上面的第二个,这个绕的我头晕

我给你写到一个类里了;
public class ComPort
{
//串口通讯对象
SerialPort taxPort;
//端口号默认是COM1
private string portName = "COM1";
//波特率默认是9600
private int baudRate = 115200;
//接收超时时间默认为1000
private double timeOut = 1000;
//数据位
private int dataBit = 8;
#region 构造函数
public ComPort()
{
taxPort = new SerialPort(portName);
taxPort.BaudRate = baudRate;
taxPort.DataBits = dataBit;
taxPort.Parity = System.IO.Ports.Parity.None;
taxPort.ReceivedBytesThreshold = 1;
taxPort.DataReceived += new SerialDataReceivedEventHandler(DataReceived);
}
#endregion
#region 析构函数
~ComPort()
{
this.Dispose(false);
}
public void Dispose()
{
Dispose(true);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
//释放托管资源
taxPort.Dispose();
}
//释放非托管资源先关闭再释放
Close();
taxPort.Dispose();
if (disposing)
{
// 对象会被 Dispose 方法释放.
// 调用GC.SupressFinalize将此对象从释放队列中清除
// 防止终结器对此对象重复释放。
GC.SuppressFinalize(this);
}
}
#endregion
#region 串口打开与关闭
/// <summary>
/// 打开串口
/// </summary>
/// <returns>是否成功</returns>
public bool Open()
{
try
{
if (taxPort.IsOpen != true)
{
taxPort.Open();
}
return true;
}
catch
{
return false;
}
}
/// <summary>
/// 关闭串口
/// </summary>
public void Close()
{
if (taxPort.IsOpen == true)
{
taxPort.Close();
}
}
#endregion
/// <summary>
/// 发送数据
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public bool Send_Data(byte[] data)
{
try
{
if (Open() == false)
{
Mess.ShowMessage("串口打开失败!请检查串口是否被占用!", 1);
return false;
}
TY_Method.delay(500);
taxPort.Write(data, 0, data.Length);
return true;
}
catch (Exception ex)
{
// Mess.ShowMessage("此次通讯错误!" + ex);
Close();
return false;
}
}
}

这是我自己程序里的通信类!

追问

我在一个类里面是没问题的,我是用到了两个类,然后出现的问题是taxport不能共用。我用static就可以了,但是我如果想要用另外一个类(是不是传参的时候传个实例?)我这个有点晕

追答

保险起见!串口对象在一个程序里最好只new一个,因为只要你用完了忘了关闭,另一个串口打开的时候就会被提示串口被占用,用static的,拿类名在第二个类里直接调用!!

追问

我是说传递ComPort port;port=new ComPort();
这个是创建了一个实例对吧
我想问的是例如用
public class useport
{
useit(ComPort port)
}
这个port是不是就可以调用ComPort这个类里面的taxport(这个值不会改变了吧,我开了的是端口一,调用的时候会显示这个是端口一吧)了?
我要实现的就是一个类中函数调用另外一个类的变量,而该类变量的值不能为null,就是需要不变。这个我这样写能实现不

追答

可以调用里面的方法!!!

追问

??????????我是说怎么用?useit(ComPort port)就能用其中方法了?这个用方法但是不能用里面的属性啊?这个属性没法调用吧。
我的意思是我用ComPort里的属性这个属性被赋值了,(和原来的默认值不一样)。现在你觉得我调用用属性调用的是哪个?被默认的还是赋值的?我需要的是赋值的。

追答

你为什么非要把打开和发送分开?有什么意图还是需求?就好比数据库的连接,以及增删改查的方法全写在一个类你改起来也方便啊!你这一块那一块到时候会很乱啊!我意思你把串口的所有东西,包括打开、关闭、发送数据、接收数据、释放资源全写到一个类里,然后在其他类要用,根据构造函数new一个对象不就完了?你是在研究什么吗?

追问

是有需求,我也没办法。串口打开了COM1,如果new一个就会发现串口标志位变成null了,已经打开的飞了。

追答

我都听糊涂了,你怎么写的?只要有了第一个类的串口对象,在第二个类里面你完全可以写发送的函数的啊!把你代码贴上来吧!

追问

管说我超

字数

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-08
用public static SerialPort SP实例化为静态类,将写串口的方法SP.Write(...)放到别的类里面。

c#中一个类打开串口,另一个类发送串口数据怎么弄
我给你写到一个类里了;public class ComPort{\/\/串口通讯对象SerialPort taxPort;\/\/端口号默认是COM1private string portName = "COM1";\/\/波特率默认是9600private int baudRate = 115200;\/\/接收超时时间默认为1000private double timeOut = 1000;\/\/数据位private int dataBit = 8;#region 构造函...

C#一个串口发送数据,另一个串口马上接收相同的数据,怎么操作
同一台机只能有一个程序打开串口,自发自收的串口数据,可以将串口的2、3针脚短接,然后再对串口写数据,同时再读串口即可,读写串口可参看MSDN, system.io.ports.serialport 的C#代码 public static void Main(){ string name;string message;StringComparer stringComparer = StringComparer.OrdinalIgnoreCa...

C#如何虚拟一个com串口,指虚拟一个本机没有的串口,通过串口调试工具向...
你直接装一个Virtual Serial Port Driver就行了,它可以虚拟出多个串口,同时也可以将两个虚拟串口连接起来,比如说你加了com3和com4,把这两个连起来之后,就可以开你图上的两个软件,一个向com3发送,一个在com4接收

c# 大数据量的串口通讯怎么处理
使用C#中的串口类然后进行串口类的初始化后【串口的设置,波特率,停止位等】,就可以进行串口的接收和发送数据了

C# 怎么样监听已打开串口的数据? 就是此端口已经打开,我要接着监听过来...
你的server端监听client发过来的数据,首先要在server注册监听指定的端口,再在client端发送消息到指定端口就行。

c#串口循环接收数据的同时怎么发送数据,同一个窜口 谢谢
串口接收是利用的了串口的 data_receove绑定的一个函数来接收 具体接收的函数语句是 sp.readexisting();还有其他的读取方式 具体看你的应用 发送的话 就直接用sp.wirte就可以了 这也是一个发送的方式 可以同时发送跟接收 前提是你的串口要是异步的工作模式 ...

c#串口循环接收数据的同时怎么发送数据???求大神指教
现在的串口基本都是双工的,硬件上支持同时收发操作。出现你说的问题原因很可能是编写发送处理过程总又一次试图打开串口,而串口在你接收线程中已经打开了。解决此问题的方法是:将发送处理和接收处理放在同一个类中。大致的代码结构如下:public class SerialPortService{ private SerialPort _port ; ...

用c#如何控制多个串口接收、发送信息???
每个串口是有串口号的,如果用的是串口控件,那么通过设置PortName = "...",这里...是COM1,COM2,...依次类推,每个代表一个串口。串口空间有个静态方法(忘了叫什么了)可以返回目前所有的串口名称。通过给不同的串口控件设置不同的名称,然后打开,就可以控制不同的串口。

c#串口 同一个串口比如COM1,com1可以同时接收和发送数据吗?c#该怎么实...
当然可以了,串口本身就是全双工的,开线程啊,用事件触发机制接收,发送数据的直接下用write指令就好了。

怎么实现用C#编写程序利用电脑COM串口接收传感器信号,再向继电器、电磁...
c#的例子如下(我朋友调试和下面的电路板通信的,协议是自定义的,你只看过程就行了),下面计算机串口和单片机设备连接还有通用的电路,不过你用什么MCU都不知道真的不好给你例子,只能有局部电路图 private void OpenSmode_Click(object sender, EventArgs e){ string S;S = "";int Sum = 0;byte...

相似回答