C#-打开所有串口失败(只有当端口打开时,BaseStream才可以用)----------在线等

AndyZhang 2013-04-16 09:18:36
在WinCE6.0平台上遇到,打开所有串口都失败,说是只有当端口打开时,BaseStream才可以用。

经过判断,串口IsOpen属性开始是false,但是打开就异常,最关键的是如果用C++,一点问题没有,求大牛帮忙啊。

BaseStream引发了异常,为啥刚创建对象,还没走到Open时,就报“只有端口打开时,BaseStream才可以用”的异常呢?????
...全文
1320 48 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
48 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2014-04-23
  • 打赏
  • 举报
回复
遇到过这种问题. 我用的是研华UNO-2074A嵌入式WINPE系统 有4个物理串口,其中2个是接到PCI插槽上的 后接的这2个我用SerialPort就无法打开. 后来修改代码,不用SerialPort,改为调用WINDOWS API就好了.
阿西_达卡 2014-04-23
  • 打赏
  • 举报
回复
楼主我也遇到同样的问题了 不过我是用VB.net用serialport 控件打开串口的读取的也是GPS数据 问题如果解决了 求教啊
鳗鱼猫猫 2014-04-02
  • 打赏
  • 举报
回复
楼主,你是怎么解决这个问题的啊
wumin940590725 2013-05-19
  • 打赏
  • 举报
回复
这个你是不是在线程中打开的啊,我以前有过线程打开的问题。确定一下是不是调用打开就这一个地方。其他的就没什么好的建议了,祝你好运
AndyZhang 2013-05-19
  • 打赏
  • 举报
回复
引用 43 楼 ayouxinping 的回复:
我同样也是做wince应用程序开发的,你的错误正是因为没有打开串口而引起的! 你串口打开的参数类型过少,有些必须需要设置的,你没有设置。
大部分参数走默认不就行了么?少哪些必须设置的参数呢?
苍穹无痕 2013-04-28
  • 打赏
  • 举报
回复
我同样也是做wince应用程序开发的,你的错误正是因为没有打开串口而引起的! 你串口打开的参数类型过少,有些必须需要设置的,你没有设置。
AndyZhang 2013-04-27
  • 打赏
  • 举报
回复
引用 41 楼 mjp1234airen4385 的回复:
[Files.Common3] "T6DeviceDll.dll","T6DeviceDll.dll",,0 吧这个类库打开,看看里面有什么访问串口类的函数,也许是它造成的。
这个是自己写的,接口根本没有调用过。
mjp1234airen4385 2013-04-26
  • 打赏
  • 举报
回复
[Files.Common3] "T6DeviceDll.dll","T6DeviceDll.dll",,0 吧这个类库打开,看看里面有什么访问串口类的函数,也许是它造成的。
cclutpk 2013-04-18
  • 打赏
  • 举报
回复
引用 16 楼 yyy__123 的回复:
会不会你的串口是虚拟的
虚拟串口操作是一样的
qldsrx 2013-04-17
  • 打赏
  • 举报
回复
引用 37 楼 zhang20072844 的回复:
我的程序要部署到掌机上,用的dll应该是掌机上的吧,不是pc上的吧
这个是编译的时候选择好的,如果编译的时候选择的是PC上的dll,那么你的程序都不能到掌机上运行。因此你在调试的时候,程序就已经使用的是掌机上的dll了,而程序应该是在模拟器里被调试的。
AndyZhang 2013-04-17
  • 打赏
  • 举报
回复
引用 36 楼 mjp1234airen4385 的回复:
你把你打包的cab包的inf文件打开看看,里面都使用了哪些类库。 看看这些类库有没有对硬件资源访问的类库造成影响。
cab的inf:

[Version]
Signature="$Windows NT$"
Provider="Thinta"
CESignature="$Windows CE$"

[CEStrings]
AppName="CESetupCab"
InstallDir=%CE1%\%AppName%

[Strings]
Manufacturer="Thinta"

[CEDevice]
VersionMin=4.0
VersionMax=6.99
BuildMax=0xE0000000

[DefaultInstall]
CEShortcuts=Shortcuts
AddReg=RegKeys
CopyFiles=Files.Common1,Files.Common2,Files.Common3,Files.Common4,Files.Common5
CESetupDLL="CESetup.dll"

[SourceDisksNames]
1=,"Common1",,"C:\Users\friendy\Desktop\CESetup\CESetupCab\"
2=,"Common2",,"C:\Users\friendy\Desktop\CESetup\CESetupCab\"
3=,"Common3",,"C:\Users\friendy\Desktop\CESetup\CESetupCab\"
4=,"Common4",,"C:\Users\friendy\Desktop\CESetup\CESetupCab\"
5=,"Common5",,"C:\Users\friendy\Desktop\CESetup\CESetup\T31-SDK01 (ARMV4I)\Release\"

[SourceDisksFiles]
"T30Service.dll"=1
"T30ServiceApiDll.dll"=2
"T6DeviceDll.dll"=3
"T6FactoryTest.exe"=4
"CESetup.dll"=5

[DestinationDirs]
Shortcuts=0,%CE2%\Start Menu
Files.Common1=0,"%CE2%"
Files.Common2=0,"%CE2%"
Files.Common3=0,"%CE2%"
Files.Common4=0,"%InstallDir%"
Files.Common5=0,"%InstallDir%"

[Files.Common1]
"T30Service.dll","T30Service.dll",,0

[Files.Common2]
"T30ServiceApiDll.dll","T30ServiceApiDll.dll",,0

[Files.Common3]
"T6DeviceDll.dll","T6DeviceDll.dll",,0

[Files.Common4]
"T6FactoryTest.exe","T6FactoryTest.exe",,0

[Files.Common5]
"CESetup.dll","CESetup.dll",,0


[Shortcuts]

[RegKeys]
"HKLM","ZZRD","CABVer","0x00000000","1.0.0.4"

AndyZhang 2013-04-17
  • 打赏
  • 举报
回复
引用 32 楼 qldsrx 的回复:
引用 30 楼 zhang20072844 的回复:如何检查? 你看下你项目引用的System.dll的版本号和所在路径,先给我看下。然后可能的话你自己使用reflector打开该dll文件,查找那个 SerialStream类中的异常出处,我本地2.0和4.0两个版本的的dll都可以跟踪到那个System.IO.Ports.SerialStream.Initializ……
这是system.dll的版本: // Assembly Reference System Version: 3.5.0.0 Name: System, Version=3.5.0.0, Culture=neutral, PublicKeyToken=969db8053d3322ac, Retargetable=Yes 但是反编译工具不太会用,我的程序要部署到掌机上,用的dll应该是掌机上的吧,不是pc上的吧
mjp1234airen4385 2013-04-17
  • 打赏
  • 举报
回复
你把你打包的cab包的inf文件打开看看,里面都使用了哪些类库。 看看这些类库有没有对硬件资源访问的类库造成影响。
mjp1234airen4385 2013-04-17
  • 打赏
  • 举报
回复
cab包里除了你自己的文件以外,还有一些系统必须的文件,会不会是这些文件造成影响。
AndyZhang 2013-04-17
  • 打赏
  • 举报
回复
引用 33 楼 mjp1234airen4385 的回复:
引用 28 楼 zhang20072844 的回复:引用 27 楼 mjp1234airen4385 的回复:不知道你是什么情况。 我这个例子是在ce5下调用串口打印机的。 http://download.csdn.net/detail/mjp1234airen4385/1664218 我这个不太一样,我开机第一次是可以的,但是安装一个cab包(CE的,和cab里面……
、 自己做一个空的cab包也会失败,空的cab包,里面就放一个txt之类的,这有影响吗
mjp1234airen4385 2013-04-17
  • 打赏
  • 举报
回复
引用 28 楼 zhang20072844 的回复:
引用 27 楼 mjp1234airen4385 的回复:不知道你是什么情况。 我这个例子是在ce5下调用串口打印机的。 http://download.csdn.net/detail/mjp1234airen4385/1664218 我这个不太一样,我开机第一次是可以的,但是安装一个cab包(CE的,和cab里面的东西没关系,因为即使安装从网上下载的UC浏览器的c……
这还叫没关系,什么是有关系? 初步怀疑是这个cab包里的什么类库或功能引起访问串口的类库失效了。
qldsrx 2013-04-16
  • 打赏
  • 举报
回复
检查端口号是否正确,也许根本不存在那个端口。
AndyZhang 2013-04-16
  • 打赏
  • 举报
回复
就是catch到了那个错误啊,InvalidOperation,说是端口没打开
vingsa8352 2013-04-16
  • 打赏
  • 举报
回复
用try吧 if(!com.IsOpen) { //设置属性 try { com.Open(); } catch(Exception) { com.Close(); com.Dispose(); } }
AndyZhang 2013-04-16
  • 打赏
  • 举报
回复
求人顶起啦,都沉了、、、
加载更多回复(28)

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧