WINCE下.net2.0使用SerialPort 打开串口异常的问题

时间:2022-11-01 18:06:52
这两天我要写一个WINCE下串口通信的程序
使用SerialPort控件,打开串口发现遇到IOException异常...
我的参数设置都是正确的...

因为同样的代码在.net3.5下是完全可以运行的...不会遇到异常

查了好久..唯一的线索就是.net2.0 sp2的问题...
据说这个sp2可以解决这个问题...
见http://www.cnblogs.com/shineqiujuan/archive/2010/01/14/1647821.html

我在PC上装了SP2还是同样的问题..
是不是在WINCE上还需要安装什么东西??

16 个解决方案

#1


不清数,没在wince上弄过串口。你弄好了把结果写上啊。

#2


引用 1 楼 nkhuangyanping 的回复:
不清数,没在wince上弄过串口。你弄好了把结果写上啊。


暂时还没找到能在.net2.0上面解决的办法...

#3


补充一下:
虽然触发了IOExceptio...但是串口确是能够成功打开的...
也能够发数据给PC....
但是奇怪的是..不能从串口读数据....
读数据的相关代码如下:
 com.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.OnDataReceived);
        delegate void somedle();
        public static string FromASCIIByteArray(byte[] characters)
        {
            ASCIIEncoding encoding = new ASCIIEncoding();
            string constructedString = encoding.GetString(characters, 0, characters.Length);
            return (constructedString);
        }
        private void OnDataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if (com.IsOpen)
            {
                byte[] bt = new byte[1024];
                int cnt = com.Read(bt, 0, 1024);
                data = FromASCIIByteArray(bt);
                //data = com.ReadLine();
                somedle sd = new somedle(ShowReceive);
                Invoke(sd);
            }
        }
        void ShowReceive()
        {
            txtShow.Text += data;
        }

#4


我现在那个CE上的就是2.0的,没有出现你说的问题啊。

#5


引用 4 楼 tjw687492 的回复:
我现在那个CE上的就是2.0的,没有出现你说的问题啊。

能否给个示例...或者其他资料??
如果方便...能否加个Q(我的是178005289)?

#6


不能沉诶-,-  
大家帮帮忙诶...
难道.net3.5出现之前...
很少人用C#操作串口么?

#7


自己顶- -

#8


        private void Form1_Load(object sender, EventArgs e)
        {
            serialPort1.PortName = "COM2";
            serialPort1.BaudRate = 19200;
        }

        string rec = "";
        delegate void InvokeDelegate();

        public void showData()
        {
            this.textBox1.Text += rec + "\r\n";
        }

        private void btnOpen_Click(object sender, EventArgs e)
        {
            if (!serialPort1.IsOpen) serialPort1.Open();
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen) serialPort1.Close();
        }

        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            rec = serialPort1.ReadLine();
            this.textBox1.BeginInvoke(new InvokeDelegate(showData));
        }

#9


引用 8 楼 tjw687492 的回复:
        private void Form1_Load(object sender, EventArgs e)
        {
            serialPort1.PortName = "COM2";
            serialPort1.BaudRate = 19200;
        }

        string rec = "";
 ……

看起来和我的代码并无太大区别啊??
你的。net2.0装了SP2了么?
然后还做了其他什么事么?

#10


出现错误后,调用GetLastError看错误代码。

#11


引用 10 楼 wuyazhe 的回复:
出现错误后,调用GetLastError看错误代码。

c#中怎么GetLastError??

#12


蛋疼啊,楼主,我的问题跟你一样 =。= ,wince6.0 ,查了下也是说要打SP2的补丁,留名看看还有别的办法没...tnnd调试的时候一切都好的

#13


引用 12 楼 tobyseven7 的回复:
蛋疼啊,楼主,我的问题跟你一样 =。= ,wince6.0 ,查了下也是说要打SP2的补丁,留名看看还有别的办法没...tnnd调试的时候一切都好的

调试的时候一切都好的??
别的办法??
你打SP2的补丁 之后可以了么???

#14


- -继续顶
求高手解答啊

#15


引用 13 楼 sepcity 的回复:
引用 12 楼 tobyseven7 的回复:

蛋疼啊,楼主,我的问题跟你一样 =。= ,wince6.0 ,查了下也是说要打SP2的补丁,留名看看还有别的办法没...tnnd调试的时候一切都好的

调试的时候一切都好的??
别的办法??
你打SP2的补丁 之后可以了么???


我没打SP2补丁啊,之后也没搞定,我用其他办法掩饰了这个问题 =。=

#16


引用 15 楼 tobyseven7 的回复:
引用 13 楼 sepcity 的回复:
引用 12 楼 tobyseven7 的回复:

蛋疼啊,楼主,我的问题跟你一样 =。= ,wince6.0 ,查了下也是说要打SP2的补丁,留名看看还有别的办法没...tnnd调试的时候一切都好的

调试的时候一切都好的??
别的办法??
你打SP2的补丁 之后可以了么???


我没打SP2补丁啊,之后也没搞定,我用其他办法掩饰了……

你难道是忽视掉那个异常??
网上看到很多人这么干的- -

如果是这样搞的??你能发数据给PC机么?

#1


不清数,没在wince上弄过串口。你弄好了把结果写上啊。

#2


引用 1 楼 nkhuangyanping 的回复:
不清数,没在wince上弄过串口。你弄好了把结果写上啊。


暂时还没找到能在.net2.0上面解决的办法...

#3


补充一下:
虽然触发了IOExceptio...但是串口确是能够成功打开的...
也能够发数据给PC....
但是奇怪的是..不能从串口读数据....
读数据的相关代码如下:
 com.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.OnDataReceived);
        delegate void somedle();
        public static string FromASCIIByteArray(byte[] characters)
        {
            ASCIIEncoding encoding = new ASCIIEncoding();
            string constructedString = encoding.GetString(characters, 0, characters.Length);
            return (constructedString);
        }
        private void OnDataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if (com.IsOpen)
            {
                byte[] bt = new byte[1024];
                int cnt = com.Read(bt, 0, 1024);
                data = FromASCIIByteArray(bt);
                //data = com.ReadLine();
                somedle sd = new somedle(ShowReceive);
                Invoke(sd);
            }
        }
        void ShowReceive()
        {
            txtShow.Text += data;
        }

#4


我现在那个CE上的就是2.0的,没有出现你说的问题啊。

#5


引用 4 楼 tjw687492 的回复:
我现在那个CE上的就是2.0的,没有出现你说的问题啊。

能否给个示例...或者其他资料??
如果方便...能否加个Q(我的是178005289)?

#6


不能沉诶-,-  
大家帮帮忙诶...
难道.net3.5出现之前...
很少人用C#操作串口么?

#7


自己顶- -

#8


        private void Form1_Load(object sender, EventArgs e)
        {
            serialPort1.PortName = "COM2";
            serialPort1.BaudRate = 19200;
        }

        string rec = "";
        delegate void InvokeDelegate();

        public void showData()
        {
            this.textBox1.Text += rec + "\r\n";
        }

        private void btnOpen_Click(object sender, EventArgs e)
        {
            if (!serialPort1.IsOpen) serialPort1.Open();
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen) serialPort1.Close();
        }

        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            rec = serialPort1.ReadLine();
            this.textBox1.BeginInvoke(new InvokeDelegate(showData));
        }

#9


引用 8 楼 tjw687492 的回复:
        private void Form1_Load(object sender, EventArgs e)
        {
            serialPort1.PortName = "COM2";
            serialPort1.BaudRate = 19200;
        }

        string rec = "";
 ……

看起来和我的代码并无太大区别啊??
你的。net2.0装了SP2了么?
然后还做了其他什么事么?

#10


出现错误后,调用GetLastError看错误代码。

#11


引用 10 楼 wuyazhe 的回复:
出现错误后,调用GetLastError看错误代码。

c#中怎么GetLastError??

#12


蛋疼啊,楼主,我的问题跟你一样 =。= ,wince6.0 ,查了下也是说要打SP2的补丁,留名看看还有别的办法没...tnnd调试的时候一切都好的

#13


引用 12 楼 tobyseven7 的回复:
蛋疼啊,楼主,我的问题跟你一样 =。= ,wince6.0 ,查了下也是说要打SP2的补丁,留名看看还有别的办法没...tnnd调试的时候一切都好的

调试的时候一切都好的??
别的办法??
你打SP2的补丁 之后可以了么???

#14


- -继续顶
求高手解答啊

#15


引用 13 楼 sepcity 的回复:
引用 12 楼 tobyseven7 的回复:

蛋疼啊,楼主,我的问题跟你一样 =。= ,wince6.0 ,查了下也是说要打SP2的补丁,留名看看还有别的办法没...tnnd调试的时候一切都好的

调试的时候一切都好的??
别的办法??
你打SP2的补丁 之后可以了么???


我没打SP2补丁啊,之后也没搞定,我用其他办法掩饰了这个问题 =。=

#16


引用 15 楼 tobyseven7 的回复:
引用 13 楼 sepcity 的回复:
引用 12 楼 tobyseven7 的回复:

蛋疼啊,楼主,我的问题跟你一样 =。= ,wince6.0 ,查了下也是说要打SP2的补丁,留名看看还有别的办法没...tnnd调试的时候一切都好的

调试的时候一切都好的??
别的办法??
你打SP2的补丁 之后可以了么???


我没打SP2补丁啊,之后也没搞定,我用其他办法掩饰了……

你难道是忽视掉那个异常??
网上看到很多人这么干的- -

如果是这样搞的??你能发数据给PC机么?