C#论坛-玄机论坛-C#论坛-玄机宝盒-玄机类库-C#

 找回密码
 关闭注册

QQ登录

只需一步,快速开始

查看: 5468|回复: 0

[求助中] C#串口发送大文件

[复制链接]
Tanic 发表于 2017-12-13 14:49:14 | 显示全部楼层 |阅读模式
1紫晶
目标:把一个字库.bin文件(3M左右)下载到单片机中,实时显示进度
private void button2_Click(object sender, EventArgs e)
        {

            button2.Enabled = false;
            button1.Enabled = false;
            comboBox1.Enabled = false;
            comboBox2.Enabled = false;
            label4.Text = "开始进行中...";

            //Thread t = new Thread(new ThreadStart(FontUrtLoad));
            //t.Start();
            //while (t.IsAlive) { }
            FontUrtLoad();
            button2.Enabled = true;
            button2.Enabled = true;
            button1.Enabled = true;
            comboBox1.Enabled = true;
            comboBox2.Enabled = true;
            label4.Text = "下载完成 观察显示结果";

        }


        byte[] bytes = new byte[3500000];
        byte[] tbyte = new byte[2048];
        private void FontUrtLoad()
        {
            int len = 0;
            int offx = 0;
            FileStream stream0 = new FileStream("UN", FileMode.Open);
            if (null != stream0)
            {
                int size = Convert.ToInt32(stream0.Length);
                len = stream0.Read(bytes, offx, size);
                offx += len;
            }
            FileStream stream1 = new FileStream("12", FileMode.Open);
            if (null != stream1)
            {
                int size = Convert.ToInt32(stream1.Length);
                len = stream1.Read(bytes, offx, size);
                offx += len;
            }
            FileStream stream2 = new FileStream("16", FileMode.Open);
            if (null != stream2)
            {
                int size = Convert.ToInt32(stream2.Length);
                len = stream2.Read(bytes, offx, size);
                offx += len;
            }
            FileStream stream3 = new FileStream("24", FileMode.Open);
            if (null != stream3)
            {
                int size = Convert.ToInt32(stream3.Length);
                len = stream3.Read(bytes, offx, size);
                offx += len;
            }
            serialPort1.DiscardInBuffer();
            serialPort1.DiscardOutBuffer();
           // serialPort1.Write(bytes, 0, offx);//不分包一次写入 可以成功
            long toffset = 0;
            while (toffset != offx)
            {
                if (toffset + 2048 < offx)
                {
                    for (int i = 0; i < 2048; i++)
                    {
                        tbyte[i] = bytes[toffset + i];
                    }
                    serialPort1.Write(tbyte, 0, 2048);
                    toffset += 2048;
                    while (serialPort1.BytesToWrite != 0) ;

                    progressBar1.Value = (int)(toffset * 1000 / offx);

                }
                else
                {
                    for (int i = 0; i < offx - toffset; i++)
                    {
                        tbyte[i] = bytes[toffset + i];
                    }
                    while (serialPort1.BytesToWrite != 0) ;
                    progressBar1.Value = (int)(toffset * 1000 / offx);
                    toffset = offx;
                }
            }
            stream0.Close();
            stream1.Close();
            stream2.Close();
            stream3.Close();
        }


先调用serialPort1.Write一次下载2048  然后等待serialPort1.BytesToWrite==0,更新进度条,继续下一个2048
事实:以上的方法无法实现。
有大佬指点一下吗?






玄机论坛-专业的C#交流论坛 交流QQ群: 16885911
帖子内网盘失效后请使用下面地址

http://bbs.msdn5.com/forum.php?mod=viewthread&tid=1218
如果失效请联系站长重新分享
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /2 下一条

QQ|玄机论坛

GMT+8, 2024-4-19 19:13 , Processed in 0.143627 second(s), 13 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表