VS2019 WPF制作OTA上位机(二)获取bin文件路径

OTA升级是通过无线通信远程把bin文件内容传输到单片机,完成升级。
因此上位机需要获取bin文件的路径,读取bin文件内容,将内容分割依次发送(因为单片机的接收缓存不会开得和bin文件一样大(十几K甚至几十K))。

首先在UI上添加控件,一个按钮控件Button,一个文字显示控件Lable,一个文字输入输出显示控件Textbox

<Window x:Class="OTA.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:OTA"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid><Label Height="40" Width="85" Content="bin文件路径:" VerticalContentAlignment="Center" VerticalAlignment="Top" HorizontalAlignment="Left"></Label><TextBox Height="40" Width="600" VerticalContentAlignment="Center" HorizontalContentAlignment="Left" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="90,0,0,0"  Name="TextBox_BinFilePath"></TextBox><Button Height="40" Width="60" Content="浏览Bin" VerticalAlignment="Top" HorizontalAlignment="Right" Margin="0,0,30,0" Name="Button_GetBinFile" Click="Button_GetBinFile_Click"></Button></Grid>
</Window>

Height是指定控件高度,Width是指定控件宽度
Content是控件的显示文字
VerticalContentAlignment=“Center” 是控件显示文字竖直方向居中显示
HorizontalContentAlignment="Center"是控件显示文字水平方向居中显示

VerticalAlignment=“Top” 是控件竖直方向靠顶部显示
HorizontalAlignment=“Left” 是控件水平方向靠左显示
HorizontalAlignment=“Right” 是控件水平方向靠右显示

Name是控件的代号,在程序里就是通过Name来控制各个控件的显示和功能

Click=“Button_GetBinFile_Click”,Button_GetBinFile_Click是点击按钮发生的函数功能名,输入click后会有 新建事件处理程序,可以直接回车来选择它,这时候会自动在cs文件里创建名为Button_GetBinFile_Click的函数
在这里插入图片描述
在这里插入图片描述

Margin是调节位置,四个参数分别是 左,上,右,下的调节
比如Button是顶部右边显示,Margin=“0,0,30,0”,将Button和最右边的距离拉开30
在这里插入图片描述
在这里插入图片描述

点击运行看看效果

在这里插入图片描述

UI做好后,实现浏览按键的功能
直接上代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO;
using Microsoft.Win32;namespace OTA
{/// <summary>/// Interaction logic for MainWindow.xaml/// </summary>public partial class MainWindow : Window{//保存读取bin文件的数据private byte[] g_read_data;public MainWindow(){InitializeComponent();}private void Button_GetBinFile_Click(object sender, RoutedEventArgs e){//需要using Microsoft.Win32;//文件浏览窗口OpenFileDialog openFileDialog = new OpenFileDialog();//打开文件浏览窗口失败if (!(bool)openFileDialog.ShowDialog()){return;}//把选择的文件绝对路径显示到控件TextBox_BinFilePath.Text = openFileDialog.FileName;//需要using System.IO;//文件流打开bin文件FileStream fileStream = new FileStream(openFileDialog.FileName, FileMode.Open, FileAccess.ReadWrite);//二进制方式读取bin文件数据BinaryReader binaryReader = new BinaryReader(fileStream);//打印bin文件的大小Console.WriteLine("bin file length:{0}", binaryReader.BaseStream.Length);//bin文件的大小int length = Convert.ToInt32(binaryReader.BaseStream.Length);//获取bin文件数据g_read_data = binaryReader.ReadBytes(length);//关闭数据流和文件流binaryReader.Close();fileStream.Close();}}
}

运行程序,点击浏览Bin,出现文件夹弹框
在这里插入图片描述
选择要升级的bin文件,点击打开

在binaryReader.close();处打个断点,调试可以看到g_read_data的内容
在这里插入图片描述
用VS code看打开的bin文件,内容和读到的是一致的,读取成功了
在这里插入图片描述
关掉断点,继续程序运行,可以看到bin文件的绝对路径已经显示在控件上了
在这里插入图片描述
接下来就是串口的功能实现了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374172.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux更改用户名_破旧安卓手机第二春,在安卓手机上使用Linux_deploy运行Linux

由于服务器位于国外&#xff0c;害怕被墙掉导致数据丢失&#xff0c;所以在本地写了脚本每小时从服务器上导出并下载到本地。但是电脑不可能二十四小时开机&#xff0c;所以很想买一个树莓派4玩玩。但是太贵辽&#xff0c;还好搜索到了Android运行Linux的方法&#xff0c;下面记…

MCUXpress IDE常用设置

NXP的开发工具Xpress是基于eclipse制作的&#xff0c;我们如果需要设置一些东西可以直接搜索eclipse是怎么设置的。 1、字体大小 搜索eclipse字体大小&#xff0c;菜单Window > Preference 而Xpress是汉化了的&#xff0c;英语不好的同学可能懵逼&#xff0c;其实就是菜单栏…

C语言中空格符、空字符、字符数组结束符、换行、回车的区别

空格符和空字符是不一样的,在ASCII里面,空格(space)符号的ASCII码是32,而空字符是0, 2个是完全不一样的2个字符 空字符 一般来描述一个字符串的结尾,其实是控制符的一种,但不能理解为没有字符,应该理解为代表什么都没有的字符.好比回车0x0A和换行0x0D虽然不显示,但是也是控制字…

anaconda如何卸载库_小白必看!Anaconda安装全攻略

本文作者&#xff1a;戴 雯文字编辑&#xff1a;方 言技术总编&#xff1a;张馨月爬虫俱乐部云端课程来袭&#xff01;爬虫俱乐部将于2020年8月25日至28日在线上举行Stata数据分析法律与制度专题训练营&#xff0c;主要是为了让学员掌握Stata软件进阶操作&#xff0c;涉及…

iOS开发网络篇—文件的上传

说明&#xff1a;文件上传使用的时POST请求&#xff0c;通常把要上传的数据保存在请求体中。本文介绍如何不借助第三方框架实现iOS开发中得文件上传。 由于过程较为复杂&#xff0c;因此本文只贴出部分关键代码。 主控制器的关键代码&#xff1a; YYViewController.m 1 #import…

var模型的matlab实现_Eviews中VAR模型的操作、脉冲响应分析和方差分解的实现

打开文件所在位置&#xff0c;获取数据。选中变量右键open打开var操作EViews,在VAR对象的工具栏中选择“View”|“Lag Structure”|“AR Roots Table/ AR Roots Graph”选项&#xff0c;得到AR根的表和图。结果显示&#xff1a;VAR模型所有根模的倒数都小于1&#xff0c;即都在…

结构体、枚举类型

一、结构体 结构体&#xff1a;就是一个自定义的集合&#xff0c;里面可以放各种类型的元素&#xff0c;用法大体跟集合一样。 1、定义的方法&#xff1a; struct student { public int nianling; public int fenshu; public string name; public string sex; public int sum; …

NXP KW38开发杂记(一)MCUXpress 运行进入NMI_Handler

这里是大佬的具体分析过程&#xff0c;感兴趣可以看看 https://www.cnblogs.com/wenhao-Web/p/13618703.html 解决办法&#xff1a; 在startup_mkw38a4.c文件里&#xff0c;定位到Flash_Config {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE}; 把最后一个参数0xFFFFFFFE改…

25个让Java程序员更高效的Eclipse插件

Eclipse提供了一个可扩展插件的开发系统。这就使得Eclipse在运行系统之上可以实现各种功能。这些插件也不同于其他的应用&#xff08;插件的功能是最难用代码实现的&#xff09;。拥有合适的Eclipse插件是非常重要的&#xff0c;因为它们能让Java开发者们无缝的开发基于J2EE和服…

NXP KW38蓝牙开发(一)入门第一课:官网蓝牙广播和连接例程,NMI禁止

首先要下载开发使用的IDE&#xff1a;MCUXpresso IDE 下载链接&#xff1a; 进入nxp的官网&#xff0c;搜索KW38 向下翻看&#xff0c;找到Xpresso&#xff0c;点击进入 习惯使用IAR开发的同学也可以下IAR版本&#xff0c;这里以Xpresso为例 下载好后安装&#xff0c;一路默…

views 多个文件夹 netcore_.NET Core中的使用Kestrel服务器理解及应用

Kestrel是一个基于libuv的跨平台.NET Core web服务器&#xff0c;libuv是一个跨平台的异步I/O库。ASP.NET Core模板项目使用Kestrel作为默认的web服务器。Kestrel支持以下功能&#xff1a;HTTPS用于启用不透明升级的WebSockets位于Nginx之后的高性能Unix socketsKestrel 被.NET…

NXP UWB NCJ29D5开发(一)环境搭建

1、从NXP的共享账号下载资料 共享账号需要找对接的NXP人员拿到&#xff0c;他会把资料分享到这个账号&#xff0c;在这个账号里面可以下载 进入nxp官网&#xff0c;登录后点击my nxp&#xff0c;选择Software Licensing and Support 进入后接着选择View accounts 进入后选择…

Stack的三种含义

作者&#xff1a;阮一峰 学习编程的时候&#xff0c;经常会看到stack这个词&#xff0c;它的中文名字叫做”栈”。 理解这个概念&#xff0c;对于理解程序的运行至关重要。容易混淆的是&#xff0c;这个词其实有三种含义&#xff0c;适用于不同的场合&#xff0c;必须加以区分。…

NXP UWB NCJ29D5开发(二)BlinkyLed例程

路径为UWB\NCJ29D5\NCJ29D5_CAS_Examples_v1.4\onic\BlinkyLed\toolsupport\keil 例程怎么来的可以看看上一篇NXP UWB NCJ29D5开发&#xff08;一&#xff09;环境搭建 1、 //系统选择外部晶振&#xff0c;时钟频率为55.2Mhz phscaAppHal_Init(PHSCA_APPHAL_XO_CLOCK_SOURCE_…

强肝保肝养肝4大食物

“强肝的食物,保肝的食物有哪些,养肝的食物有哪些”如果您对这些食物不了解不明白。那就看看专家为您推荐的四款强肝保肝养肝的食物。荔枝&#xff08;供图/华盖&#xff09;一、是荔枝&#xff0c;荔枝可以保肝&#xff0c;对肝有好处根据《本草纲目》记载荔枝有强肝健胰的效果…

如何查看注解实现_该怎么运用注解呢?Java团队元老有话说

来源 | 异步 15讲能学好诞生24年的JAVA吗&#xff1f;你当然会感到怀疑&#xff0c;众所周知&#xff0c;在技术向的IT论坛上&#xff0c;“如何在十天之内快速掌握好Java&#xff1f;”这类问题&#xff0c;往往会招来嘲笑。来源于知乎但在当下&#xff0c;5分钟能看完一部电影…

NXP S32K144开发(一)环境搭建和新建工程

1、首先需要安装S32 Design Studio for ARM&#xff0c;在NXP官网可以搜索到&#xff0c;这玩意也是基于eclipse的 安装好后就可以打开了。 2、新建工程 过程可以参考NXP官网&#xff1a; https://www.nxp.com/document/guide/get-started-with-the-s32k144evb:NGS-S32K144E…

首先记录异常的根本原因

Logback日志库的0.9.30版本带来了一个很棒的新功能&#xff1a;从根&#xff08;最内部&#xff09;异常而不是最外部异常开始记录堆栈跟踪。 当然&#xff0c;我的兴奋与我贡献了此功能无关。 用塞西尔德米勒&#xff08;Cecil B. de Mille&#xff09; 的话来解释&#xff1a…

Android 中的 Service 全面总结

1、Service的种类 按运行地点分类&#xff1a; 类别区别 优点缺点 应用本地服务&#xff08;Local&#xff09;该服务依附在主进程上&#xff0c; 服务依附在主进程上而不是独立的进程&#xff0c;这样在一定程度上节约了资源&#xff0c;另外Local服务因为是在同一进程因此不…

找出互联网类似以下图的实例

转载于:https://www.cnblogs.com/sghcjy/p/4978851.html