SerialPort 在WinCE 下 调用Open时报错的解决办法

在Windows CE 6.0环境下开发.NET系统时,我们要用到.NET COMPACT FRAMEWORK 2.0,然而微软的SerialPort在CE6.0的环境下在打开时报错.错误内容如下:

at System.IO.Ports.SerialStream.WinIOError()
at System.IO.Ports.SerialStream.WinIOError()
at System.IO.Ports.SerialStream.CheckResult()
at System.IO.Ports.SerialStream.SetBufferSizes()
at System.IO.Ports.SerialPort.Open()


为了解决这个问题,折腾了很久,我开始怀疑SerialPort在CE6.0下的兼容性,查看MSDN,上面说只要安装了.NET COMPACT FRAMEWORK 2.0即可。

而且之前的开发中在用到SerialPort.WriteTimeOut属性的时候也出现让人不可思议的结果,程序执行的时候把SerialPort.WriteTimeOut设定的值解释成,每次写完一次后都要经过WriteTimeOut设定的时间后才能写进行下一次的写操作。这让人很郁闷。我本来想每次写完就立即返回的,MSDN上说设置成0表示立即返回。但是如果设置成0又会报错,错误的意思是这个值不能设置成0,只能是正数或者-1。

折腾了很内,我发现安装.NET COMPACT FRAMEWORK 2.0 sp2后可以修正这些问题,希望能给遇到类似问题的朋友有所帮助。补丁下载地址

官网上说这个补丁修正了以下错误:

  • NETCFRPM 在 x64 上失败
  • 在 Vista 上,从“控制面板”>“程序和功能”启动 MSI 时安装/卸载失败将无提示
  • 因为 COM 绑定已被绑定,终结器在 RTF 对象上失败
  • 如果未设置 Attach Enabled 注册表项,VS 会在尝试附加时崩溃
  • Thread.Join() 在 CE 6.0 平台上失败,错误为 ERROR_INVALID_HANDLE
  • 循环引用可能引起内存损坏
  • JIT 断言在遇到不存在的 COM 端口时失败
  • 对 NETCF 2.0 使用泛型时发生 TypeLoadException
  • IrDA 在 Windows CE 5.0 设备上中断
  • NetCFRPM 和 MDBG 无法定位无外设设备
  • SerialPort:如果使用 DataReceived 事件检索通过串行端口发送的 Unicode 字符,则会发生数据损坏
  • SerialPort:无法打开超过 COM9 的 COM 端口
  • SerialPort:GetPortNames() 不返回超过 COM9 的串行端口名称
  • SerialPort:如果使用 DataReceived 事件检索通过串行端口发送的 Unicode 字符,则会发生数据损坏
  • 如果已在本机线程上调用了本机回调委托,NETCF 会在退出时发生死锁
  • VS 2005 RTM 在 Windows Mobile 6 平台上尝试部署 NETCFv2.wce5.ARMV4I.cab/System_SR_ENU.cab,而不是 NETCFv2.wm.ARMV4I.cab/System_SR_ENU_wm.cab
  • XmlSerializerializationWriter:当 GetSpecifiedMember 返回 false,序列化被终止,并会导致数据丢失
  • 访问冲突会使用字符串字段封送一个类
  • 从函数计算之后的断点跳出会导致断点仍在相同位置,并且 VS 2005 随后会挂起
  • COM:N->M byref 封装中发生访问冲突
  • 使用 Interlocked.Exchange 时封装代码中出现本机异常
  • StubPolicyAlloc 中有访问冲突 (eestub\policy.cpp)
  • SerialPort.Open 在 CE 6.0 设备上引发 IOException
  • Type.GetDefaultMembers() 不返回基类型的默认成员
  • 安装同一 MSI 的不同区域设置版本会导致在“添加/删除程序”中出现多个 NetCF 实例
  • VS 2005 在 Crossbow 平台上尝试部署 System_SR_ENU.cab 而不是 System_SR_ENU_wm.cab
  • 调试器不能正确处理通过 COM 输入的新本机线程
  • NETCFRPM 在设备使用 ipv6 时不能正确解析连接字符串
  • V2 SP2:HttpWebRequest:HTTPS 请求在使用 TLS_RSA_WITH_3DES_EDE_CBC_SHA cipher 时失败
  • 如果在按 F5 之前有活动断点,调试器会发生访问冲突
  • Web 浏览器的 NavigatingEventArgs 不允许取消导航
  • XmlSerializer 无法反序列化带有空格的枚举


原文地址:https://www.cnblogs.com/shineqiujuan/p/1647821.html