首页 > 编程知识 正文

windows7(win7旗舰版升级win10)

时间:2023-05-05 01:55:51 阅读:100252 作者:2933

00-1010在微软Build 2020开发者大会上,WinUI团队公布了可以公开预览的WinUI 3 Preview 1。它允许开发人员在Win32中使用WinUI。Winui3ppreview 1包含一个新的VisualStudio项目模板,可以为创建C#和C /Win32项目。NET 5。从技术上讲,WinUI 3分离了UWP的XAML层、合成层和输入层,并通过NuGet将它们独立地分发到Windows 10版和更高版本的Win32应用程序中。

WinUI 3适用于Win32和UWP。本文主要讨论Win32的情况。

00-1010之前,我们一直抱怨WPF多年没有提供新的主题和控件,性能没有提升。现在微软只是提供了所有新的用于桌面开发的WinUI 3,WPF没有任何变化。

简单来说,UWP的开发体验并不好(这个话题说来话长),如果有Bug,我们要等下半年Windows更新才能修复,但是微软开发人员专心在UWP的UI上添加各种功能;那个。NET Core更新很快,但是很少有人对大幅度提升老WPF的UI层感兴趣,有动力。因此,WinUI将UWP的UI层与Windows SDK的其他部分分开,并将从Windows转移到Nuget。现在构建一个C或C#(。NET 5)程序,然后从Nuget安装一个WinUI 3的包来覆盖一个UI层,一个基于Fluent Design的应用就诞生了,界面友好,性能无与伦比。

上图列出了与其他平台相比,WinUI 3的一些特性。除此之外,WinUI 3还有很多优点,比如开源、更新更快、不与系统版本绑定等。有关更多详细信息,让我们看看微软是如何推广它的:

WinUI——Windows的现代原生UI平台。

但是,使用WinUI 3需要一年半的时间。以下是微软给出的发布路线图。目前只能试用预览版。

00-1010要试用WinUI 3,首先必须有一台Windows 10 1803或以上版本的电脑(WinUI 3至少支持1803),然后需要使用Visual Studio 2019 16.7或以上版本(目前只能安装预览版)。安装Visual Studio时,请选择以下所有工作负载:NET桌面开发常见的Windows平台开发使用C桌面开发C (V142)常见的Windows平台工具为常见的Windows平台加载可选组件,当然。也应该安装. NET 5.0。

然后在https://aka.ms/winui3/previewdownload,下载并安装WinUI 3项目模板扩展,这样就可以在Visual Studio中创建WinUI项目。

可选C或C#,这里我选择了C#的空白app、打包(桌面中的winui)项目和对应的Windows平台:

项目创建后 Visual Studio 生成了两个项目。第一个包含应用的代码,代码结构基本和 UWP 一样,只是少了用于打包应用的 Package.appxmanifest 和一些图片。从依赖项里可以看到项目已经安装了 Microsoft.WinUI 3 的包。从项目属性里可以看到这就是个 .NET 5 的项目。

Visual Studio 生成的第二个项目是一个 Windows 应用程序打包项目,该项目经配置后可将应用生成为适合部署的 MSIX 程序包。 也就是说 UWP 项目中用于打包的部分被独立出来了。这个项目还应该是解决方案的启动项目。运行这个项目后创建的应用会添加到开始菜单中,这点也和UWP一样。

到这里为止都和预期的一样,我之后还尝试了将 UWP 应用移植到 WinUI ,基本上只需要将 Windows.UI 命名空间改为 Microsoft.UI就可以了,XAML 和 C# 代码完全不用变。只可惜目前 WinUI 还很简陋,Win2D、Community Toolkit 等微软自己发布的 UWP 包都还没有 WinUI 版本。而且没有设计视图,XAML 视图也没有智能感知,现在想要用 WinUI做些什么有趣的项目会很困难。不过从目前的移植难度上来看,将来正式发布后应该可以完整地将 UWP 的 UI 的开发经验运用在 WinUI 上。

4. 和 WPF 及 UWP 进行对比#

既然 WinUI 3 开发模式和 WPF 及 UWP 都很像,我当然对它们之间的对比很感兴趣。

命名#

首先说说命名,“WinUI” 光这个名字就 Win 了。 “UWP” 太高雅,我敢打赌国内有些 UWP 的开发(例如我)都不能好好地把 UWP 的全称拼出来;“WPF” 好些,但 WPF 的含义也让人很疑惑。而 Windows UI 简称 WinUI ,意义和发音都很清晰明确。不过这三个都比很多人都不会读的 “Xamarin” 强多了。

可是有了 WinUI 3 ,就会有人问“那 WinUI 2 呢?”WinUI 2是一个 UWP 的控件库,当然的只能用在 UWP 上。这就很尴尬了,WinUI 的 3 和 2 根本不是同一个概念,实在很容易让人混淆,说不定以后会把后缀的 3 去掉(我这篇文章就常常懒得理写这个3)。而且 UWP 中代码的命名空间以 Windows.UI 开头,在 WinUI 3 中则 Microsoft.UI ,按着 Office 365 改名为 Microsoft 365、Bind Ads 改名为 Microsoft Advertising 这些经验,该不会以后 WinUI 可能改名为 Microsoft UI ,简称 MiUI 吧?

权限#

权限方面是 WinUI 的一个亮点,因为它本质上就是个 Win32 程序,可以放开手脚随便来。相对的 UWP 有很严格的权限限制,开发 UWP 时常常会感到绑手绑脚。例如下面这段代码,大部分 WPF 开发者都难以想象只是最小化 UWP 程序而已,它就不能好好运行了:

Copyint count = 0; DispatcherTimer timer = new DispatcherTimer(); timer.Interval = TimeSpan.FromSeconds(1); timer.Tick += (s, e) => { myButton.Content = count++; }; timer.Start();

UWP 的生命周期如上图,当 UWP 处于 background 运行或 suspended 状态时应用基本处于暂停状态,也也不会处理UI功能。我明白这是 UWP 为了省电、安全等原因才这样设计,但对开发人员来说真的太不方便。而 WinUI 应用基本上就是个 Win32 应用,目前看来不会有这些坑。

开发体验#

说起开发体验,WPF 好歹还算正常,Visual Studio 的设计视图运行正常,编译起来也快。UWP 编译很慢,设计视图经常出问题,Blend 也时好时坏把设计师都气跑了。就算完全按照官方的文档完成一个 UWP App,甚至一行代码都不改,发布到商店后还是有可能崩溃。而对于应用商店,真是千言万语汇聚成一个草花头。

现在 WinUI 的 XAML 视图连智能感知都没有,也没有设计视图,实在没法谈开发体验。很难猜测正式发布的时候会怎么样,希望至少和WPF保持一致吧。

性能#

WPF 总是给人“慢”的印象,除了因为在它刚出来的时候(10年前)电脑性能不够导致留下了刻板印象,还有一个主要原因是:它真的很慢。

UWP 的 XAML 有很优秀的性能表现,除此之外为了照顾已经不存在的 Windows Phone 的贫弱性能,很多控件模版都经过精心设计并大幅简化。

为了验证 WinUI 的性能我写了下面这些代码,然后分别移植到 WPF .Net Framework 4.8、WPF .NET 5、UWP、WinUI(WPF 和 UWP/WinUI 的代码稍微有一点不同):

Copyfor (int i = 0; i < 50; i++) { var rectangle = new Rectangle { Height = 500, Width = 500, Opacity = ((double)i + 40) / 100d, RadiusX = 108, RadiusY = 98, StrokeThickness = 3, Stroke = new SolidColorBrush(Color.FromArgb(255, 75, 75, (byte)(i * 250d / 50d))), RenderTransformOrigin = new Point(0.5, 0.5) }; Root.Children.Add(rectangle); var angle = i * 360d / 50d; var transform = new RotateTransform { Angle = angle }; rectangle.RenderTransform = transform; var storyboard = new Storyboard(); storyboard.Children.Add(new DoubleAnimation { Duration = TimeSpan.FromSeconds(1), From = angle, To = angle + 360 }); Storyboard.SetTarget(storyboard, transform); Storyboard.SetTargetProperty(storyboard, "Angle"); storyboard.RepeatBehavior = RepeatBehavior.Forever; storyboard.Begin(); }

上面这段代码是让50个矩形旋转,十分考验 WPF 的性能。结果可以说出乎意料。

CPU内存GPUWPF .NET Framework 4.8126076WPF .NET 5.0128572UWP32836WinUI56595

我的环境是 i7-6820HQ 及集成显卡。WPF 平台占用 70 多%的 GPU,这我大致能猜到。UWP 十分流畅,GPU 只占用 WPF 的一半,CPU 和 内存都有出色表现,不过我还以为会更低的。

WinUI 这个浓眉大眼的我真的万万没想到,不仅掉帧明显,还占用了几乎 100% GPU,也就是说它连这么简单的代码都跑不起来。()顺便一提,将测试代码中旋转的矩形减少为10个,WPF 的程序占用 32% GPU,而 WinUI 占用 70 多%。)

从上面的数据基本可以说明,WinUI 离设计目标还十分遥远,毕竟是预览版,还有一年半载可以慢慢优化。

5. 结语#

总的来说微软雄心勃勃,可是现在拿出来的 WinUI 预览版还差得太远,功能未完善,性能不及预期。我觉得大致方向没错,WinUI 对 C++、WPF、UWP 开发者都是个新的工具新的机遇,可以关注一下。

6. Q & A#

Windows 7 怎么办?#

按微软公布的路线图,再包括跳票等因素,等 WinUI 真正可用时 Windows 7 已停止更新很久,到时 Windows 7 的占有率可能已经下降到开发者不会关心的程度。

基于 .NET Core 的 Wpf 还是 WinUI?#

假使不想花精力将现有项目迁移到 WinUI,或者对来自 UWP 的 WinUI 没信心,又或者舍不得 Windows 7 的用户,并且对触摸没需求,当然可以继续选用 WPF,基于 .NET Core 的 WPF 会是个很好的选择。

MAUI 还是 WinUI ?#

MAUI 还在很遥远的将来(2021年11月),我没试玩过,所以不好评价。如果有跨平台需求当然只能选 MAUI,如果 WinUI 团队技高一筹实现了 MAUI 难以企及的超高性能,那就选 WinUI。不过 MAUI 这个名字太过普通/普遍,可能会被逼着改名吧。

那 UWP 呢?#

权限受限的 UWP 可以说是人畜无害,对用户来说可能也是个不错的选择。而且 UWP 还支持 Xbox 和 Hololens 等平台,目前看来还是有它的市场。

Winforms 呢?#

人只有忘却了过去,才能好好活着。

WinUI 有未来吗?#

我做了好多年 Silverlight 开发,买了5、6部 Windows Phone 手机,写了几十篇 UWP 文章,根据我丰富的经验,我可以肯定 WinUI 是有未来的。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。