【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

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

评论

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

中国首个“芯片大学”即将落地;生成对抗网络(GAN)的数学原理全解

京东科技开发者

技术 网络 GAN 芯片

浅析:线程安全

朱华

Java 多线程与高并发

Week 2 学习总结

balsamspear

极客大学架构师训练营

kubernetes是微服务发展的必然产物

架构师修行之路

Kubernetes 分布式 微服务

后疫情时期,看区块链如何赋能文创产业加快经济复苏?

CECBC

区块链技术 文创产业

读——沟通的艺术,看入人里,看出人外(第三章)

废材姑娘

当我在听播客时,我在听什么?

Nydia

数字经济2.0—趋势、逻辑、选择

CECBC

区块链 数字经济

头条终面:写个消息中间件

yes

面试 消息队列

都别拦着我,我要删库了

MySQL从删库到跑路

Linux oracle重装 MySQL 运维 root

第四周 作业一:系统架构【未陌】

a d e

系统架构

MySQL-技术专题-事务和并发一致性问题

洛神灬殇

有状态的服务其实可以做更多的事情

架构师修行之路

分布式 微服务

mybatis plus 自动更新数据库时间的小坑

废材姑娘

Java mybatis

Kubeless 架构设计 | 玩转 Kubeless

donghui

Serverless kubeless

Week 2命题作业

balsamspear

极客大学架构师训练营

IDEA常用设置、快捷键及代码模板

jiangling500

IDEA

MySQL-技术专题-解决死锁问题

洛神灬殇

第四周 作业二:系统架构学习总结【未陌】

a d e

系统架构 互联网架构

学习笔记:架构师训练营-第四周

四夕晖

高并发 系统架构演化

实现一个简单的 MobX

局外人

大前端 js React

JAVA中的内部类详解

倔强的攻城狮

Java

反向保理系统设计

森林

图解超难理解的 Paxos 算法(含伪代码)

多颗糖

分布式 算法 分布式系统 架构师 一致性算法

打破区块链游戏经济的隔阂,或许该从跨游戏资产入手

CECBC

区块链 游戏

Netty源码解析 -- 服务端启动过程

binecy

Netty nio

甲方日常 29

句子

工作 随笔杂谈 日常

MySQL-技术专题-mysql的联合索引

洛神灬殇

深拷贝链表,python处理音频信号和数字信号、vim教程、swift单元测试和UI测试 John 易筋 ARTS 打卡 Week 21

John(易筋)

单元测试 ARTS 打卡计划 python 数字信号 vim教程 深拷贝链表

架构师训练营第 1 期 - 第四周课后练习

Anyou Liu

极客大学架构师训练营

【高并发】秒杀系统架构解密,不是所有的秒杀都是秒杀(升级版)!!

冰河

并发编程 高并发 架构设计 秒杀 异步

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