速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

.NET 5 重大变更之 WPF 和 Windows Forms

  • 2021-01-21
  • 本文字数:1427 字

    阅读完需:约 5 分钟

.NET 5重大变更之WPF和Windows Forms

.NET 5 重大变更系列的最后一个主题是 WPF 和 Windows Forms。这些桌面技术在.NET Core 3.0 之前是不可用的,因为.NET Core 的早期版本主要专注于基于 Web 的应用程序(ASP.NET Core)。


2002 年.NET 首次发布时,Windows Forms(非正式地被称为 WinForms)是最早的应用程序框架之一。(其他框架包括 WebForms、Console 和 Windows Services。)WinForms 深受 Visual Basic 的影响,和 VB 一样,它对原生 Windows 控件进行了一层薄薄的包装。默认情况下,这提供了非常好的性能,但定制能力相当有限。一般来说,开发人员应该允许操作系统处理样式等方面的东西。


WinForms 的第一个主要变化是在 2005 年发布的.NET 2.0 中出现的,引入了微软认为低效的各种用户控件的替代品,包括基本的数据网格。从那时起,这项技术就被认为是“完整的”,唯一的变化是偶尔更新一下,以便支持更高的 DPI。即使是长期存在的 bug 通常也会被忽略,这让使用 WinForms 进行新项目开发的开发人员感到非常恼火。


Windows Presentation Foundation (WPF)是微软首次尝试创建的一个完全可定制的 GUI 框架。虽然只比 WinForms 晚发布了四年,但它还是花了很长一段时间才被普遍接受,因为它的设计模式和概念更为复杂,性能也可能是一个问题。虽然有些技术(如虚拟化)可以使 WPF 在大型数据集上比 WinForms 快得多,但需要更深入的知识才能正确使用它们。此外,很多开发人员认为定制样式是必需的,因为默认样式很“丑”。


WPF 有两个影响深远的关键“特性”,一个是使用 XAML 进行 UI 布局,另一个是使用 MVVM 模式进行数据绑定。这些也被引入到其他项目中,比如 Silverlight 和 Universal Windows Platform。


像 WinForms 一样,WPF 多年来也一直被认为是“完整的”。它甚至不支持XAML-2009,即使是在 2012 年XAML规范发布之后。作为回应,Avalonia等项目试图改进 WPF 的缺陷,比如允许将事件直接绑定到模型或视图模型。

新的 SDK


在.NET Core 3.x 中,WPF 和 WinForms 需要一个叫作 Microsoft.NET.Sdk.WindowsDesktop 的自定义 SDK。在.NET 5 中,使用的是 Microsoft.NET.Sdk,就像其他.NET 5 项目一样。但现在的目标框架是 net5.0-windows,而不是 net5.0。

隐藏控制台输出


绝大多数 WPF 和 WinForms 应用程序不显示控制台窗口,这是默认的选项。如果你需要一个地方来显示额外的诊断信息,可以将 OutputType 设置为 Exe 而不是 WinExe。


在.NET 5 中,除非你将 DisableWinExeOutputInference 设置为 true,否则 OutputType 设置将被忽略。

错误处理的改进


错误处理的改进也可能是个重大变更。在.NET Core 3 的 Windows Forms 中,很多验证代码根本不存在。这意味着如果你传入一个无效的参数,它可能会抛出一个 NullReferenceException 或者表现出一种不确定的行为。


在.NET 5 中,它会抛出相应的 ArgumentException、ArgumentNullException 或 ArgumentOutOfRangeException。如果是属性为空,而不是参数为空,那么将抛出 InvalidOperationException。


有关如何正确使用异常,请参见.NET中的异常设计

移除状态栏控件


我们在上面讨论 WinForms 的历史,是为了解释状态栏控件都发生了什么。在.NET Framework 2 中被替换的一个控件是不起眼的StatusBar。在.NET 2 中是StatusStrip,它们的作用是一样的。


微软没有解释为什么要移除它,所以对于一个大多数人都不知道的控制,其维护成本太高了。StatusBar 在设计器工具箱中已经很久不可见了,在.NET 5 中已经被移除了。


本系列其他文章



原文链接


.NET 5 Breaking Changes for WPF/Windows Forms

2021-01-21 19:5614471

评论

发布
暂无评论
发现更多内容

为什么大多数团队推行自动化测试最后却不了了之?

Liam

测试 自动化测试 测试自动化

软件测试/测试开发 | web自动化测试-文件上传与弹框处理

测试人

软件测试 自动化测试 测试开发 Web自动化测试 selenium

性能测试中获取JVM资源信息

FunTester

海量并发低延时 RTC-CDN 系统架构设计(上)

网易云信

实时音视频 音视频开发

进击中的 Zebec 生态,Web2 与 Web3 世界的连接器

股市老人

rust入坑指南之ownership

京东科技开发者

rust JVM 内存 企业号 2 月 PK 榜 ownership

Bytebase 体验官之勇闯新手村

朱亚光

关于老板让我用Openresty实现的各种奇怪需求以及实现

做梦都在改BUG

Java openresty

开源指南针发布在即:估量有尺,开源有道

kk-OSC

开源

Greenfield

股市老人

李宏伟 安警官的IP地址已经锁定你!IP地址究竟如何定位到莽村附近?

郑州埃文科技

IP地址 IP定位查询

使用 NGINX 在 Kubernetes 中实现多租户和命名空间隔离

NGINX开源社区

nginx NGINX Ingress Controller NGINX Kubernetes Gateway 企业号 2 月 PK 榜

Wallys /industrial wifi6 router/ Ipq6010 /ipq6018/ipq6000 2x2 2.4G & 5G

Cindy-wallys

IPQ6010 ipq6018 IPQ6000

飞桨助力南京邮电大学智能芯片测试团队斩获“互联网+”大赛全国银奖

飞桨PaddlePaddle

paddle 芯片 大学生 飞桨 国赛

Seal 0.4 发布:软件供应链安全洞察更上一层楼!

SEAL安全

软件供应链安全 SEAL 企业号 2 月 PK 榜

政企服务机构如何进行数字化转型?

优秀

数字化转型

海泰方圆受邀参加中关村网信联盟会议并斩获三项殊荣

电子信息发烧客

软件测试/测试开发 | web自动化测试-PageObject 设计模式

测试人

软件测试 自动化测试 测试开发 Web自动化测试

聊一聊 gRPC 中的拦截器

江南一点雨

gRPC

设计模式第六讲:责任链模式和迭代器模式详解

C++后台开发

设计模式 责任链模式 迭代器模式 后端开发 Linux服务器开发

联邦GNN综述与经典算法介绍

京东科技开发者

算法 数据 GNN 联邦算法 图场景

构建云边端一体的分布式云架构,软硬结合驱动边缘计算创新场景

Baidu AICLOUD

边缘计算 分布式云

如何在现实场景中随心放置AR虚拟对象?

HarmonyOS SDK

HMS Core

Apache Doris 1.2.2 Release 版本正式发布

SelectDB

大数据 数据分析 OLAP 分析型数据库 数据库·

2022年最新数据库调查报告:超八成DBA月薪过万,你拖后腿了吗?

墨天轮

MySQL 数据库 oracle 工资 dba

GaiaX开源解读 | 表达式作为逻辑动态化的基础,我们是如何设计的

阿里巴巴文娱技术

开源 研发效能 服务端 多端开发

DR-AP40X9-A-Qualcomm-IPQ4019/IPQ4029-2.4G&5G

Cindy-wallys

IPQ4019 ipq4029

软件测试 | 常用模拟器使用

测吧(北京)科技有限公司

测试

CNCF社区首个!KubeEdge达到软件供应链SLSA L3等级

华为云开发者联盟

云原生 华为云 企业号 2 月 PK 榜 华为云开发者联盟

.NET 5重大变更之WPF和Windows Forms_语言 & 开发_Jonathan Allen_InfoQ精选文章