小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

.NET 5 重大變更

 timtxu 2021-03-26

.NET 5 重大變更系列的最后一個(gè)主題是 WPF 和 Windows Forms。這些桌面技術(shù)在.NET Core 3.0 之前是不可用的,因?yàn)?NET Core 的早期版本主要專注于基于 Web 的應(yīng)用程序(ASP.NET Core)。

2002 年.NET 首次發(fā)布時(shí),Windows Forms(非正式地被稱為 WinForms)是最早的應(yīng)用程序框架之一。(其他框架包括 WebForms、Console 和 Windows Services。)WinForms 深受 Visual Basic 的影響,和 VB 一樣,它對原生 Windows 控件進(jìn)行了一層薄薄的包裝。默認(rèn)情況下,這提供了非常好的性能,但定制能力相當(dāng)有限。一般來說,開發(fā)人員應(yīng)該允許操作系統(tǒng)處理樣式等方面的東西。

WinForms 的第一個(gè)主要變化是在 2005 年發(fā)布的.NET 2.0 中出現(xiàn)的,引入了微軟認(rèn)為低效的各種用戶控件的替代品,包括基本的數(shù)據(jù)網(wǎng)格。從那時(shí)起,這項(xiàng)技術(shù)就被認(rèn)為是“完整的”,唯一的變化是偶爾更新一下,以便支持更高的 DPI。即使是長期存在的 bug 通常也會(huì)被忽略,這讓使用 WinForms 進(jìn)行新項(xiàng)目開發(fā)的開發(fā)人員感到非常惱火。

Windows Presentation Foundation (WPF)是微軟首次嘗試創(chuàng)建的一個(gè)完全可定制的 GUI 框架。雖然只比 WinForms 晚發(fā)布了四年,但它還是花了很長一段時(shí)間才被普遍接受,因?yàn)樗脑O(shè)計(jì)模式和概念更為復(fù)雜,性能也可能是一個(gè)問題。雖然有些技術(shù)(如虛擬化)可以使 WPF 在大型數(shù)據(jù)集上比 WinForms 快得多,但需要更深入的知識(shí)才能正確使用它們。此外,很多開發(fā)人員認(rèn)為定制樣式是必需的,因?yàn)槟J(rèn)樣式很“丑”。

WPF 有兩個(gè)影響深遠(yuǎn)的關(guān)鍵“特性”,一個(gè)是使用 XAML 進(jìn)行 UI 布局,另一個(gè)是使用 MVVM 模式進(jìn)行數(shù)據(jù)綁定。這些也被引入到其他項(xiàng)目中,比如 Silverlight 和 Universal Windows Platform。

像 WinForms 一樣,WPF 多年來也一直被認(rèn)為是“完整的”。它甚至不支持XAML-2009,即使是在 2012 年XAML規(guī)范發(fā)布之后。作為回應(yīng),Avalonia等項(xiàng)目試圖改進(jìn) WPF 的缺陷,比如允許將事件直接綁定到模型或視圖模型。

新的 SDK

在.NET Core 3.x 中,WPF 和 WinForms 需要一個(gè)叫作 Microsoft.NET.Sdk.WindowsDesktop 的自定義 SDK。在.NET 5 中,使用的是 Microsoft.NET.Sdk,就像其他.NET 5 項(xiàng)目一樣。但現(xiàn)在的目標(biāo)框架是 net5.0-windows,而不是 net5.0。

隱藏控制臺(tái)輸出

絕大多數(shù) WPF 和 WinForms 應(yīng)用程序不顯示控制臺(tái)窗口,這是默認(rèn)的選項(xiàng)。如果你需要一個(gè)地方來顯示額外的診斷信息,可以將 OutputType 設(shè)置為 Exe 而不是 WinExe。

在.NET 5 中,除非你將 DisableWinExeOutputInference 設(shè)置為 true,否則 OutputType 設(shè)置將被忽略。

錯(cuò)誤處理的改進(jìn)

錯(cuò)誤處理的改進(jìn)也可能是個(gè)重大變更。在.NET Core 3 的 Windows Forms 中,很多驗(yàn)證代碼根本不存在。這意味著如果你傳入一個(gè)無效的參數(shù),它可能會(huì)拋出一個(gè) NullReferenceException 或者表現(xiàn)出一種不確定的行為。

在.NET 5 中,它會(huì)拋出相應(yīng)的 ArgumentException、ArgumentNullException 或 ArgumentOutOfRangeException。如果是屬性為空,而不是參數(shù)為空,那么將拋出 InvalidOperationException。

有關(guān)如何正確使用異常,請參見.NET中的異常設(shè)計(jì)。

移除狀態(tài)欄控件

我們在上面討論 WinForms 的歷史,是為了解釋狀態(tài)欄控件都發(fā)生了什么。在.NET Framework 2 中被替換的一個(gè)控件是不起眼的StatusBar。在.NET 2 中是StatusStrip,它們的作用是一樣的。

微軟沒有解釋為什么要移除它,所以對于一個(gè)大多數(shù)人都不知道的控制,其維護(hù)成本太高了。StatusBar 在設(shè)計(jì)器工具箱中已經(jīng)很久不可見了,在.NET 5 中已經(jīng)被移除了。

本系列其他文章

  • .NET 5基類庫的重大變更;

  • .NET 5重大變化:歷史性的技術(shù);

  • .NET 5 ASP.NET Core重大變更。

原文鏈接

.NET 5 Breaking Changes for WPF/Windows Forms

https://www./news/2020/12/net-5-breaking-changes-windows/

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多