全栈算力,加速行业AI落地 了解详情
写点什么

.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:5612206

评论

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

开源软件运动|网景公司|大教堂与集市

开源青年

开源 开源青年 开源文化 人物志

亚马逊云科技发布中国业务战略!

亚马逊云科技 (Amazon Web Services)

进程、线程、协程

无心

网络编程 操作系统

中国唯一入选 Forrester 领导者象限,阿里云 Serverless 产品能力全球第一

阿里巴巴中间件

架构实战训练营-模块一课后作业

Johnny

架构实战营

话说 ReentrantLock_源码

木子的昼夜

架构师实战营[M1]-微信的业务架构和学生管理系统架构设计

LeoWang

【LeetCode】合并两个有序数组Java题解

Albert

算法 LeetCode 4月日更

话说 线程的概念&生命周期

木子的昼夜

模块一:课后作业

黄先生

架构实战营

架构实战营 - 作业01

Kram

iOS 面试策略之代码考查到offer的比较和选择

iOSer

ios 面试

大数据计算时数据倾斜问题及解决方案

五分钟学大数据

大数据 4月日更

话说 用户线程&守护线程&线程组&线程优先级

木子的昼夜

团队里不能留的三种人

石云升

辞退 28天写作 职场经验 管理经验 4月日更

业务架构训练营第0期模块一作业

目标一个亿

话说 线程切换&线程数设置

木子的昼夜

话说 ReadWriteLock

木子的昼夜

架构师实战营 [模块一]- 微信业务架构和学生管理系统架构设计

ifc177

架构实战营

话说 面试题连环问

木子的昼夜

话说 LockSupport

木子的昼夜

话说 ReadWriteLock 第二篇

木子的昼夜

面试题: String "123" 转 int类型

木子的昼夜

作业内容1

谢博琛

大数据分析之分析模型介绍

大数据技术指南

数据分析 4月日更

面试的信心来源于过硬的基础(iOS开发方向)

ios 面试

话说 线程创建&启动&停止

木子的昼夜

话说 Lock condition

木子的昼夜

快速学一遍vue的状态管理模式 -- Vuex

空城机

JavaScript Vue 大前端 4月日更 vuex

话说 内存屏障,有序性保证

木子的昼夜

架构实战营第一期作业

王华

架构实战营

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