jinghong21 发表于 2016-12-29 09:01:40

STM32虚拟串口打开情况下被拔出,上位机软件怎么处理?

我现在是能检测到虚拟串口被拔出的,不过现在需要串口再次插上去的时候,能够再次使用,这个就不好弄了,因为拔掉之前的串口状态是Open着的,串口再插上去不管你Open()还是Close()软件都会出问题!而且这种情况去操作,上位机软件经常出现崩溃闪退的现象!
有什么方法让上位机软件不闪退崩溃吗?

党国特派员 发表于 2016-12-29 09:54:00

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

andypanfan 发表于 2016-12-29 09:13:12

有点深奥没怎么看懂!!!:lol:lol:lol:lol:lol

myfocus-2048857 发表于 2016-12-29 09:13:29

虚拟串口,没玩过,听过

jackten 发表于 2016-12-29 09:13:43

我也想知道                        

斜阳__ 发表于 2016-12-29 09:21:58

这个涉及到操作系统层面了;好像没办法处理;应该是在拔之前close;

jinghong21 发表于 2016-12-29 09:27:03

斜阳__ 发表于 2016-12-29 09:21
这个涉及到操作系统层面了;好像没办法处理;应该是在拔之前close;

你好,我在友善串口调试助手上面实验,是可以这样操作的,而且串口助手不会崩溃,它里面应该是做了处理。现在我只是想让软件不闪退,弹出对话框什么的都无所谓!

党国特派员 发表于 2016-12-29 09:28:05

对虚拟串口要检测USB串口是否被拨掉消息的处理,具体参考windows消息WM_DEVICECHANGE

jinghong21 发表于 2016-12-29 09:34:23

本帖最后由 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);
      }

creep 发表于 2016-12-29 09:48:42

应该不会崩溃吧,我们经常遇到是再次打开的时候会失败而已。
页: [1] 2 3
查看完整版本: STM32虚拟串口打开情况下被拔出,上位机软件怎么处理?