目标:把一个字库.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
事实:以上的方法无法实现。
有大佬指点一下吗?
|