STM32虚拟串口打开情况下被拔出,上位机软件怎么处理?
我现在是能检测到虚拟串口被拔出的,不过现在需要串口再次插上去的时候,能够再次使用,这个就不好弄了,因为拔掉之前的串口状态是Open着的,串口再插上去不管你Open()还是Close()软件都会出问题!而且这种情况去操作,上位机软件经常出现崩溃闪退的现象!有什么方法让上位机软件不闪退崩溃吗?
jinghong21 发表于 2016-12-29 09:34
我现在就是检测USB被插拔的,这些都没问题的!
/// 检测USB串口的拔插
///
你明显是处理的不对。WM_DEVICECHANGE消息只是告诉你设备有变化,具体还要处理DBT_DEVICEQUERYREMOVE,DBT_DEVICEQUERYREMOVEFAILED,DBT_DEVICEREMOVEPENDING这几种情况。
你可以参考下:http://msdn.microsoft.com/en-us/library/aa363427(v=vs.85).aspx 有点深奥没怎么看懂!!!:lol:lol:lol:lol:lol 虚拟串口,没玩过,听过 我也想知道 这个涉及到操作系统层面了;好像没办法处理;应该是在拔之前close; 斜阳__ 发表于 2016-12-29 09:21
这个涉及到操作系统层面了;好像没办法处理;应该是在拔之前close;
你好,我在友善串口调试助手上面实验,是可以这样操作的,而且串口助手不会崩溃,它里面应该是做了处理。现在我只是想让软件不闪退,弹出对话框什么的都无所谓! 对虚拟串口要检测USB串口是否被拨掉消息的处理,具体参考windows消息WM_DEVICECHANGE 本帖最后由 jinghong21 于 2016-12-29 09:37 编辑
党国特派员 发表于 2016-12-29 09:28
对虚拟串口要检测USB串口是否被拨掉消息的处理,具体参考windows消息WM_DEVICECHANGE...
我现在就是检测USB被插拔的,这些都没问题的!
/// 检测USB串口的拔插
/// </summary>
/// <param name="m"></param>
protected override void WndProc(ref Message m)
{
if (m.Msg ==Detection.UsbSet.WM_DEVICE_CHANGE) // 捕获USB设备的拔出消息WM_DEVICECHANGE
{
try
{
comPort.Close(); //我怀疑闪退就是这一局导致的,因为comPort已经不存在了,去操作它导致软件崩溃的! //可是,要是不加这一局comPort的状态就是Open,下一次USB再插进来,都不能操作comPort
}
catch { }
if (Detection.GetComNum() != null)
{
try
{
comPort.PortName = Detection.GetComNum();
comPort.BaudRate = Setting.ComSet.comBaudRate;
comPort.Open();
statusStrip1.BackColor = Color.Green;
toolStripStatusLabel1.Text = "Open " + comPort.PortName + " " + comPort.BaudRate.ToString();
}
catch
{
comPort.Close();
comPort.Open();
}
}
else
{
comPort.Close();
statusStrip1.BackColor = Color.Red;
toolStripStatusLabel1.Text = "Close " + comPort.PortName + " " + comPort.BaudRate.ToString();
}
}
base.WndProc(ref m);
}
应该不会崩溃吧,我们经常遇到是再次打开的时候会失败而已。