日期:2014-05-18  浏览次数:21097 次

在 System.InvalidOperationException 中第一次偶然出现的“System.dll”类型的异常
这个怎么解决啊!!~~~本人初学C#,读串口时报异常,但是程序能运行

------解决方案--------------------
探讨
还有就是再接收数据时,持续一段时间之后就会出现以下异常,程序就不能继续进行下去
未处理的“System.ArgumentOutOfRangeException”类型的异常出现在 System.Windows.Forms.dll 中。……

------解决方案--------------------
文本框的MaxLength是int类型的,修改这个属性就行。
Text太长,控件会刷新迟钝

看你的程序不像是要处理GPS,倒像是个通讯测试程序。
依靠文本框存储历史通讯数据不是好办法。

要么定期/定量清理,要么存文件。
------解决方案--------------------
算了,我以前一直是做c/C++,接触C#没几年,做老师还差点。
我qq也只在小圈子里用,不想一举一动都有太多人盯着。

其实csdn就是老师,有问题大家懂的话,肯定会帮你。
---------------------------------------------------
你这个计时器异常很奇怪:计时器肯定没问题,委托调用也没问题,
那只有串口、UI控件的操作可能有问题。

1、
int n = comm.BytesToRead;语句应该有隐患,如果缓冲区没有数据,n=0,
那么后续的代码会不会出问题就不知道了,我没有仔细分析。你可以先把这个处理了。
但我觉得这应该不是真正原因:你的串口1秒内肯定有数据。

2、用try-catch捕捉异常出现的位置。

-------------------------------------------
GPS数据:
count4应该是下一帧头前,count3呢?代码中看不出
至于为什么显示的数据中有帧头,是因为:s.Substring(count3, count4 - count3)
始终是从count3开始取数据的,
如果数据包中包含多帧,那这个循环中,至少从第二行开始都会出现帧头
------解决方案--------------------
探讨
异常始终解决不了,用串口读取不用timer倒是没有异常,现在调的用串口事件读取根本取不到值了,纠结,timer事件能取到值就是有异常

------解决方案--------------------
可以直接这样用吗?
comm.DataReceived += comm_DataReceived;

------解决方案--------------------
探讨
引用:
可以直接这样用吗?
comm.DataReceived += comm_DataReceived;

不能事件申明内容不一样SerialDataReceivedEventArgs这个是串口的
System.Timers.ElapsedEventArgs这个是timer事件的