vb.net如何关闭其他窗体的串口,救救我把,软件都快编好了,就差最后一个毛病了
我的父窗体上有一个serialport,打开这个(用来接收数据),然后子窗体打开的时候要用到一个serialport,我把它写在模块里面的说,但是当药用的时候就出现父窗体上的串口关闭不了的情况,于是就出错了,是不是再什么地方有技巧的啊?还有用来接收数据的串口能不能写到模块里面去的呀?要怎么写的说???
下面是我的代码
main父窗体load的时候
SerialPort1.PortName = "com1"
SerialPort1.Open()
然后子窗体一个按钮点击的时候
main.SerialPort1.Close()
Call sp_cmd(add_code, data_code, qu & lie)‘这个就是写到模块的串口发送程序
模块里面的程序
Dim sp As New IO.Ports.SerialPort
Dim str_head As String
Dim i As Integer
Dim byts_cmd(30) As Byte
'Dim str_qulie As String
sp.PortName = "com1"
sp.BaudRate = 9600
sp.Parity = IO.Ports.Parity.None
sp.DataBits = 8
sp.StopBits = IO.Ports.StopBits.One
If sp.IsOpen = True Then
sp.Close()
End If
sp.Open()
。。。。。
到open的时候就出错了:
未处理 System.UnauthorizedAccessException
Message="对端口“com1”的访问被拒绝。"
我研究了下,把main_load里面的串口关闭就能通过的说
但是在其他窗体里面用main.sertalport.close()是关闭不了的
监视变量里面说对非共享成员的引用要求对象引用
大家帮帮我把
[解决办法]
Dim sp As New IO.Ports.SerialPort
把这个,也就是定义串口的语句放到模块里,定义成public,让两个窗体共用这个串口
试试看
[解决办法]
那你干么不在弹出第二个窗口前关掉呢呵~~这也是个办法
Dim B as new Form2
B.show
要不你就把它当参数传给Form2吧(说不定你有其它用处上面的不管用的话)
还有 If sp.IsOpen = True Then
sp.Close()
End If
你这里永远不可能成功.
因为Dim sp As New IO.Ports.SerialPort
[解决办法]
请先把对象确定清楚
SerialPort 是串口类,实例化得到具体引用,每个引用彼此独立
看代码的情况,
在父窗体中使用SerialPort1应该是串口控件或实例化的串口对象,
模块中使用串口类进行实例化。
执行的结果是在同时拥有两个串口实例,父一个,模块一个
由于串口一次只能由一个实例占用,而你的程序实际上是用了两个,
他们必须在对方不使用的情况下进行open才能正常运行,所以会出现
Message="对端口“com1”的访问被拒绝,
同楼上,建议你把父的串口去掉,都使用同一串口对象,就不会有问题了。
或者把串口对象和发送程序都作在主窗体,做成静态共享
public sp As New IO.Ports.SerialPort
public Static sub sp_cmd(add_code, data_code, qu & lie)
在子窗体调用时,使用main.sp.Close() 和main.sp_cmd应该就可以了
[解决办法]