你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
举报
jinghong21 发表于 2016-12-29 09:34 我现在就是检测USB被插拔的,这些都没问题的! /// 检测USB串口的拔插 ///
查看全部评分
党国特派员 发表于 2016-12-29 09:28 对虚拟串口要检测USB串口是否被拨掉消息的处理,具体参考windows消息WM_DEVICECHANGE ...
斜阳__ 发表于 2016-12-29 09:21 这个涉及到操作系统层面了;好像没办法处理;应该是在拔之前close;
creep 发表于 2016-12-29 09:48 应该不会崩溃吧,我们经常遇到是再次打开的时候会失败而已。
党国特派员 发表于 2016-12-29 09:54 你明显是处理的不对。WM_DEVICECHANGE消息只是告诉你设备有变化,具体还要处理DBT_DEVICEQUERYREMOVE,DB ...
jinghong21 发表于 2016-12-29 10:25 你好,这个没关系的。 我在 if (Detection.GetComNum() != null) 做了处理了!
党国特派员 发表于 2016-12-29 10:41 你再仔细看下,这是系统在拔掉USB之前,给你一个Close的机会。过了这个机会你再Close就要报错了。因为已 ...
你明显是处理的不对。WM_DEVICECHANGE消息只是告诉你设备有变化,具体还要处理DBT_DEVICEQUERYREMOVE,DBT_DEVICEQUERYREMOVEFAILED,DBT_DEVICEREMOVEPENDING这几种情况。
你可以参考下:http://msdn.microsoft.com/en-us/library/aa363427(v=vs.85).aspx
评分
查看全部评分
我现在就是检测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);
}
评分
查看全部评分
你好,我在友善串口调试助手上面实验,是可以这样操作的,而且串口助手不会崩溃,它里面应该是做了处理。现在我只是想让软件不闪退,弹出对话框什么的都无所谓!
评分
查看全部评分
是很奇怪,在Debug调试下就不会出现闪退的现象,直接打开exe就会出现闪退的现象!
你好,这个没关系的。
我在 if (Detection.GetComNum() != null) 做了处理了!
就是有一个疑惑的地方,闪退的解决办法?
你再仔细看下,这是系统在拔掉USB之前,给你一个Close的机会。过了这个机会你再Close就要报错了。因为已经不存在要关闭的设备了。
switch (m.WParam.ToInt32())
这个值一直为7,不会等于DBT_DEVICEREMOVECOMPLETE或者DBT_DEVICEARRIVAL。
评分
查看全部评分