摘要

这就是一个记录自己进行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. RPA 抖音机器人汇总

    一.RPA 抖音小店催好评机器人 RPA机器人详情: 1.配置好抖音小店订单号与催好评话术 2.启动抖音小店催好评机器人 3.机器人打开飞鸽客服软件 4.自动搜索订单号,自动发送催好评内容 5.机器人 ...

  2. jenkins安装配置及发布

    1. yum install -y lrzsz vim net-tools 2. 下载jdk-8u131-linux-x64.tar.gz http://www.oracle.com/technetw ...

  3. 【python基础】第11回 数据类型内置方法 02

    本章内容概要 列表内置方法 字典内置方法 元组内置方法 集合内置方法 可变类型与不可变类型 本章内容详细 1.列表内置方法 list 列表在调用内置方法之后不会产生新的值 1.1 统计列表中的数据值的 ...

  4. 一张图进阶 RocketMQ - 消息发送

    前 言 三此君看了好几本书,看了很多遍源码整理的 一张图进阶 RocketMQ 图片链接,关于 RocketMQ 你只需要记住这张图!觉得不错的话,记得点赞关注哦. [重要]视频在 B 站同步更新,欢 ...

  5. Netty 如何高效接收网络数据?一文聊透 ByteBuffer 动态自适应扩缩容机制

    本系列Netty源码解析文章基于 4.1.56.Final版本,公众号:bin的技术小屋 前文回顾 在前边的系列文章中,我们从内核如何收发网络数据开始以一个C10K的问题作为主线详细从内核角度阐述了网 ...

  6. HashMap存储自定义类型键值和LinkedHashMap集合

    HashMap存储自定义类型键值 1.当给HashMap中存放自定义对象时,如果自定义对象是键存在,保证键唯一,必须复写对象的hashCode和equals方法. 2.如果要保证map中存放的key和 ...

  7. java面向对象编程---方法

    二.方法 1.方法的重载 1.1 方法的签名 方法的唯一标识就是方法的签名:方法的名字和参数列表: 一个类中不能出现两个方法的签名完全一样的方法 1.2 方法的重载 方法名相同但参数列表不同称之为方法 ...

  8. ReentrantLock源码详解

    前言 以前只知道ReentrantLock底层基于AQS实现,相对于(旧版本的)synchronized: 更轻量(基于CAS而不是管程),由JDK实现 可以实现公平/非公平 可中断等待 可绑定多个条 ...

  9. java通过注解顺序通过映射导出excel

    import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.ann ...

  10. ElementUI嵌套页面及关联增删查改实现

    @ 目录 前言 一.ElementUI如何在原有页面添加另外一个页面并实现关联增删查改? 二.实现步骤 1.ElementUI代码 2.思路:很简单 1.1 首先通过el-row.el-col.el- ...