摘要

这就是一个记录自己进行WinUI项目实践的博客,项目开源地址如下,觉得有帮助的可以去看看,因为项目都开源了,所以保姆级的讲解肯定不如直接看代码来的实在了。

电子脑壳项目地址

为什么叫新

因为之前发过一篇讲开发上位机应用的博客,所以作为区分就把这篇成为新的一篇了,微软最新的windows应用开发框架是WindowsAppSDK这个大家都有听说过,当然大家实际项目中使用的多不多就不知道了。

有人说WPF还能再战很多年,对于我来说,我刚做客户端开发的时候接触的就是UWP,现在要我返回去做WPF我感觉有点不习惯,当然做Winform的话我还能适应。言归正传,年轻人都喜欢新事物,所以我也不例外就拿最新的框架上手了。

项目实践和DEMO的区别

项目实践个人感觉是要做一套有正常操作流程的应用,并且保证大多数的场景下都不会出异常,这样用起来才能像个正常软件一样,要是demo的话肯定就是只是分单元的验证某个功能的正常与否。

在框架选定之后,肯定就是进行功能的拆分,方案的查找验证,然后再进行代码的编写。

以我写的电子脑壳应用为例分析

功能列表

  • 时间显示
  • 动作控制
  • 人脸数据展示和表情识别

需要验证的功能

  • 摄像头的操作
  • usb读写

这些都考量好了,就可以进行实际的开发了。

实践中遇到的一些挑战

1. 摄像头帧处理事件

先来一张应用首页图

这个电子脑壳的应用已经开源了,项目地址

就是在我使用社区工具包了里的相机帮助类处理相机的帧到达事件时,本来在uwp里正常的代码,放到WinUI里就会莫名的失效,现象就是帧到达事件不会持续触发了,这个问题我在翻阅uwp的文档的时候好像文档中有提到,大概是如下的问题,我想这个应该在WinUI里应该也有同样的问题。

所以我就找了官方的DEMO进行验证,终于把uwp的代码迁移到WinUI之后验证了这个问题。

迁移后的摄像头操作demo地址如下 项目地址

DEMO图如下

2. 串口连接触发事件

之前我在UWP里用的好好的代码,放到WinUI项目的时候怎么都不触发了,我以为WinUI有BUG就没管了,直到后来看到了官方文档,才发现自己一直都忘了调用这个Start方法,表示很丢人。

之所以需要这个功能,是因为我想实现设备的热插拔功能,这样拔掉插上设备就不用重启应用了。

临时方案的处理

对于摄像头帧触发事件的临时方案我选择了用OpenCVSharp处理摄像头的数据,然后再处理帧 将帧转化成SoftwareBitmap然后再用windows AI库进行表情识别。

用起来感觉也还可以就是有些消耗CPU资源。

其他的一些小问题,因为WinUI是基于.net6运行的,所以.net的库基本上都能使用,而且WinUI应用权限比UWP高多了,可以随心所欲的做一些事情,所以解决起来也是很容易的。

心得感悟

WinUI虽不完美,但是未来可期,希望微软的团队能够好好的完善这个框架,不能像UWP那样半死不活。

还有在做项目实践的时候,框架选定好了,一定不要反复横跳,要想办法解决问题,而不是换框架,方法肯定有很多,需要我们认真阅读文档和找到一些使用方式,即使官方确实不支持,我们也可以反馈给官方,或者自己参与贡献,这样也会促进框架的完善。

特别鸣谢以及参考推荐文档

感谢dino.c大佬的一个番茄钟,因为我的表盘其实就是抄他番茄钟的代码。

感谢h哥火火给的一些思路。

当然还要感谢超超,毕竟有些代码还是抄他的。

参考推荐文档如下

一个番茄钟

Win2D samples

opencvsharp

WindowsAppSDK

WindowsCommunityToolkit

ElectronBot

ElectronBot.DotNet

LibUsbDotNet

WinUI(WASDK)项目实践——优雅的开发上位机应用(新)的更多相关文章

  1. 用WindowsAppSDK(WASDK)优雅的开发上位机应用

    C#开发上位机应用的一些选择 如果你不想看介绍,可以直接跳到优雅开发示例那里. 1. WASDK(WinUI 3) Windows 应用 SDK 是一组新的开发人员组件和工具,它们代表着 Window ...

  2. vc++MFC开发上位机程序

    用vc++MFC开发过不少跟单片机通讯的上位机程序了.搞懂了MFC架构,开发还是很快的,与底层单片机程序通讯,可以用串口.usb.网络.短信形式.串口现在用的越来越少了,一般电脑跟单片机在一块,使用串 ...

  3. MFC开发上位机到底用Dialog结构还是文档结构?

    最近要跟着导师一起开发一款大型上位机.MFC新人在考虑用对话框结构还是文档结构. 虽然说书上说大型结构的软件都需要文档结构,但是目前来看,对话框可以实现功能,并且对话框的程序更小一些,节省资源加载速度 ...

  4. VS2013开发上位机并调用MSCcommm控件的方式

    此文章适合VC++串口通信入门 一.页面布局及添加控件 1, 安装好vs2010如图 2, 新建一个基于VC++的MFC项目comm 注意:点击ok,然后next,这时候要将application t ...

  5. BizTalk 2010/2013 EDI B2B项目实践(1)

    BizTalk 2010/2013 EDI B2B项目实践(1) BizTalk开发标准EDI B2B是件非常容易的事情,但对于初学者可能有很多专业术语不太理解,不知道如何下手,我之前开始学的时候虽然 ...

  6. C#上位机开发(二)—— Hello,World

    上一篇大致了解了一下单片机实际项目开发中上位机开发部分的内容以及VS下载与安装,按照编程惯例,接下来就是“Hello,World!” 1.新建C#项目工程 首先选择新建Windows窗体应用(.NET ...

  7. 2018最新mfc作为上位机接收硬件端USB或串口数据显示成图片 解决串口接收数据丢字节丢包问题

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9490616.html 本文用的是VS2013MFC写串口数据接收: 第一步:首先建立一个MFC ...

  8. 物联网框架ServerSuperIO.Core(.netcore)跨平台,一套设备驱动通吃嵌入式、上位机、云服务

    1.      概述... 2 2.      ServerSuperIO.Core跨平台开发环境... 2 3.      ServerSuperIO.Core特点... 2 4.      Ser ...

  9. LabVIEW上位机与串口通信

    渊源 大一的时候,学校开了门公共选修课,叫LabVIEW编程,当时的我当然还不知道LabVIEW是啥东东,但还是选了.上课的老师是机械学院的一个副教授.他给我们展示了好几个用LabVIEW做的项目.譬 ...

随机推荐

  1. 强化学习-Windows安装gym、atari和box2d环境

    安装gym pip3 install gym pip3 install gym[accept-rom-license] 安装atari环境[可选] 下载安装VS build tools 如果出现 OS ...

  2. Spring框架系列(8) - Spring IOC实现原理详解之Bean实例化(生命周期,循环依赖等)

    上文,我们看了IOC设计要点和设计结构:以及Spring如何实现将资源配置(以xml配置为例)通过加载,解析,生成BeanDefination并注册到IoC容器中的:容器中存放的是Bean的定义即Be ...

  3. jfinal中如何使用过滤器监控Druid监听SQL执行?

    摘要:最开始我想做的是通过拦截器拦截SQL执行,但是经过测试发现,过滤器至少可以监听每一个SQL的执行与返回结果.因此,将这一次探索过程记录下来. 本文分享自华为云社区<jfinal中使用过滤器 ...

  4. 抓包整理外篇——————autoResponder、composer 、statistics [ 三]

    前言 经过了前文的介绍的部分已经能够为自己抓包提供一个舒适的环境了,但是舒服的拿到我们的包后,可能有些需求还是难以搞定,fiddler 提供了我们一些其他模块,让我们工作轻松,请往下看. 正文 aut ...

  5. C语言动态输出等腰三角形

    C语言动态输出等腰三角形 题目要求:输入行数 打印出对应行数的等腰三角形,要求使用for循环嵌套. 思路 while语句写外层死循环 用于判断输出的数据: 分析: 最外层for,来控制最外层行数,存储 ...

  6. lerna源码阅读

    能够找到入口文件 能够本地调试

  7. 如何编写测试团队通用的Jmeter脚本

    平时学习.工作过程中,编写的一些jmeter脚本,相信大多数都遇到过这个问题.那就是:如果换一台电脑运行,文件路径不一样,会导致运行失败. 前不久,自己就真真切切遇到过一回,A同学写了个脚本用于压测, ...

  8. SpringCloudAlibaba分布式事务解决方案Seata实战与源码分析-上

    概述 定义 Spring Cloud Alibaba Seata 官网地址 https://seata.io/zh-cn/ 最新版本1.5.2 Spring Cloud Alibaba Seata 文 ...

  9. 基于CentOS的IB网卡驱动安装

    一.准备步骤 1.查看centos版本 cat /etc/issue或者cat /etc/redhat-release  2.查看linux版本 cat /proc/version或uname -a或 ...

  10. ASP.NET Web 应用 Docker踩坑历程——续

    ASP.NET Web 应用 Docker踩坑历程发表后,也开始使用Docker了,然而发布的过程比较痛苦,经常发生下图的事情: 据说是nuget包还原时发生错误 百度了半天也找不到解决的方法,而发生 ...