4320|6

61

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

WinCE5 C# serialport控件的 接收数据 问题! [复制链接]

问题说明:
    我在WinCE5环境里,使用vs2005(C#)编写串口Demo ,使用serialport控件,现在数据接收不行,查看资料后说需要适用委托,我按照例子更改后仍然不能接收,将接收这一段的代码贴出来,请大家指点!
    using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.IO.Ports;
using System.Threading;

namespace DrawList
{
    public partial class TestCOM : Form
    {
        //[DllImport("kernel32.dll",   EntryPoint="CreateFile")]   

        delegate void HandleInterfaceUpdateDelegate(string text); //委托
        HandleInterfaceUpdateDelegate interfaceUpdateHandle;

        public TestCOM()
        {
            InitializeComponent();
            Set_SerialPort(0);
        }

        byte[] WriteBuf = new byte[255];
        byte[] ReadBuf = new byte[255];
        int TimeNum = 0;
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                textBox1.Text = "";
                String[] Sendstr = textBox2.Text.Split(' ');
                int writelen = Sendstr.Length;
                for (int i = 0; i < Sendstr.Length; i++)
                {
                    WriteBuf = Convert.ToByte(Sendstr, 16);
                }
               
                Set_SerialPort(0);
                serialPort1.Open();
               
                serialPort1.Write(WriteBuf, 0,writelen);
                //serialPort1.WriteLine(textBox2.Text);

                serialPort1.Close();
            }
            catch (Exception ex)
            {
                textBox1.Text = ex.Message.ToString();
            }   
        }
        void Set_SerialPort(int bl)
        {
            if (bl == 0)
            {
                //serialPort1.PortName = "COM" + textBox3.Text;
                if (comboBox3.Text != "")
                {
                    serialPort1.PortName = comboBox3.Text;
                }
                else
                {
                    serialPort1.PortName = "COM3";
                }
                if (comboBox1.Text == "")
                {
                    serialPort1.BaudRate = 9600;
                }
                else
                {
                    serialPort1.BaudRate = Convert.ToInt32(comboBox1.Text);
                }

                serialPort1.DataBits = Convert.ToInt32(numericUpDown1.Value);

                if (serialPort1.DataBits == 7)
                {
                    serialPort1.StopBits = System.IO.Ports.StopBits.Two;
                }
                if (serialPort1.DataBits == 8)
                {
                    serialPort1.StopBits = System.IO.Ports.StopBits.One;
                }
                if (serialPort1.DataBits == 9)
                {
                    serialPort1.StopBits = System.IO.Ports.StopBits.None;
                }
                if (comboBox2.Text == "Odd")
                {
                    serialPort1.Parity = System.IO.Ports.Parity.Odd;
                }
                else if (comboBox2.Text == "Even")
                {
                    serialPort1.Parity = System.IO.Ports.Parity.Even;
                }
                else if (comboBox2.Text == "None")
                {
                    serialPort1.Parity = System.IO.Ports.Parity.None;
                }
                else if (comboBox2.Text == "")
                {
                    serialPort1.Parity = System.IO.Ports.Parity.None;
                }

                interfaceUpdateHandle = new HandleInterfaceUpdateDelegate(AddText); //实例化委托对象
                serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(serialPort1_DataReceived);

                serialPort1.ReceivedBytesThreshold = 1;

                serialPort1.WriteBufferSize = 1000;
                serialPort1.WriteTimeout = 1000;
                serialPort1.ReadBufferSize = 1000;
                serialPort1.ReadTimeout = 1000;
            }
            else if (bl == 1)
            {
                serialPort1.WriteBufferSize = 1000;
                serialPort1.WriteTimeout = 1000;
                serialPort1.ReadBufferSize = 1000;
                serialPort1.ReadTimeout = 1000;

                serialPort1.PortName = "COM3";
                serialPort1.BaudRate = 9600;
                serialPort1.DataBits = 8;   
                serialPort1.StopBits = StopBits.One;
                serialPort1.Parity = Parity.None;
            }
        }
        #region Get COM number
        private void TestCOM_Load(object sender, EventArgs e)
        {
            timer1.Interval = 1000;
            string[] ports = SerialPort.GetPortNames();
            for (int i=0; i < ports.Length; i++)
            {
                comboBox3.Items.Add(ports.ToString());
            }
        }
        #endregion

        private void button2_Click(object sender, EventArgs e)//Close this Form
        {
            timer1.Enabled = false;
            serialPort1.Close();
            Close();
        }

        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            
            //StringBuilder datatext;
            //datatext = new StringBuilder();
            String datatext = "";
            if (!serialPort1.IsOpen)
            {
                serialPort1.Open();
            }
            if (serialPort1.ReceivedBytesThreshold > 0)
            {
                byte[] tmpbuf = new byte[serialPort1.BytesToRead];

                serialPort1.Read(tmpbuf, 0, serialPort1.BytesToRead);
                Thread.Sleep(50);

                for (int i = 0; i < serialPort1.BytesToRead; i++)
                {
                    //datatext.Append(tmpbuf.ToString() + " " + i.ToString() + " ");
                    datatext = datatext + tmpbuf.ToString() + " " + i.ToString() + " ";
                    
                }
                this.textBox1.Invoke(interfaceUpdateHandle, datatext.ToString());

                //AddText(datatext);
            }
               
        }
        private void AddText(string text)
        {
            textBox1.Text += text.ToString();
        }
    }
}

最新回复

这位大哥,可以把这份串口的工程发给我吗,我是一个新手,看到您的程序对我很有用,可以把它发给我吗?谢谢您了!我的邮箱:aojingbo888@163.com  详情 回复 发表于 2008-8-1 09:16
点赞 关注

回复
举报

74

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
没有人回答?看来悬了
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
用这个
if (textBox1..InvokeRequired)
               {
                   this.lblMsg.Invoke(new EventHandler(this.AddText), new object[] { datatext.ToString(), EventArgs.Empty });
               }

private void AddText(object sender,eventargs e)
        {
            textBox1.Text += sender.ToString();
        }


good luck
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

4
 
早已解决了,还是谢谢你的回复。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

5
 
小弟也在学做这方面的,能把代码发一份给我吗?liuxiaobing.aptech@163.com
先谢谢
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

6
 
这位大哥,可以把这份串口的工程发给我吗,我是一个新手,看到您的程序对我很有用,可以把它发给我吗?谢谢您了!我的邮箱:liuzhongwei101@163.com
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

7
 
这位大哥,可以把这份串口的工程发给我吗,我是一个新手,看到您的程序对我很有用,可以把它发给我吗?谢谢您了!我的邮箱:aojingbo888@163.com
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表