活动
.NET 9 Windows 窗体中的新增功能
本文介绍 .NET 9 Windows 窗体中的新增功能。
重要
此功能集是实验性的,Control.InvokeAsync
除外。
新式应用需要异步通信模型。 随着 .NET 上的Windows 窗体的发展,更多的组件需要封送到在 async
UI 线程上运行的方法。 例如,WebView2、本机 Windows 10 和 Windows 11 API 等控件,或语义内核等新式异步库。 另一种方案是共享基于其他 UI 堆栈(如 WPF、WinUI 或 .NET MAUI)Windows 窗体构建async
的 MVVM ViewModel。
下面列出了为支持异步方案而添加的新方法:
- System.Windows.Forms.Form.ShowAsync
- Form.ShowDialogAsync
- TaskDialog.ShowDialogAsync
- Control.InvokeAsync(此 API 不是实验性的。)
此 API 在编译器错误后面受到保护,因为它是实验性的。 若要禁止显示错误并启用对 API 的访问,请将以下内容 PropertyGroup
添加到项目文件:
<PropertyGroup>
<NoWarn>$(NoWarn);WFO5002</NoWarn>
</PropertyGroup>
提示
有关如何禁止显示此规则的详细信息,请参阅 编译器错误WFO5002。
BinaryFormatter
被视为不安全,因为它容易受到反序列化攻击,这可能导致拒绝服务(DoS)、信息泄露或远程代码执行。 它在反序列化漏洞被充分理解之前实现,其设计不遵循现代安全最佳做法。
从 .NET 9 开始,其实现已被删除,以防止这些安全风险。 使用时 BinaryFormatter
, PlatformNotSupportedException
将引发异常。
Windows 窗体在许多方案中使用BinaryFormatter
,例如,在序列化剪贴板和拖放操作的数据时,最重要的是Windows 窗体设计器。 在内部,Windows 窗体继续使用更安全的BinaryFormatter
子集来处理具有已知类型集的特定用例。
适用于 .NET 9 的Windows 窗体随分析器一起交付,可帮助识别不知不觉参与二进制序列化的时间。
有关详细信息BinaryFormatter
,请参阅 BinaryFormatter Windows 窗体 迁移指南。
重要
此功能集是实验性的。
已将对深色模式的初步支持添加到Windows 窗体,目标是在 .NET 10 中完成支持。 当颜色模式更改时,将 SystemColors 更改颜色模式以匹配。 应用的颜色模式可以设置为以下值之一:
SystemColorMode.Classic
- (默认值) 浅色模式,与以前版本的Windows 窗体相同。SystemColorMode.System
- 尊重 Windows 设置的浅色或深色模式。SystemColorMode.Dark
- 使用深色模式。
若要应用颜色模式,请调用 Application.SetColorMode(SystemColorMode) 程序启动代码:
namespace MyExampleProject;
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
Application.SetColorMode(SystemColorMode.Dark);
Application.Run(new Form1());
}
}
Friend Module Program
<STAThread()>
Friend Sub Main(args As String())
Application.SetHighDpiMode(HighDpiMode.SystemAware)
Application.EnableVisualStyles()
Application.SetCompatibleTextRenderingDefault(False)
Application.SetColorMode(SystemColorMode.Dark)
Application.Run(New Form1)
End Sub
End Module
此 API 在编译器错误后面受到保护,因为它是实验性的。 若要禁止显示错误并启用对 API 的访问,请将以下内容 PropertyGroup
添加到项目文件:
<PropertyGroup>
<NoWarn>$(NoWarn);WFO5001</NoWarn>
</PropertyGroup>
提示
有关如何禁止显示此规则的详细信息,请参阅 编译器错误WFO5001。
FolderBrowserDialog
现在支持选择存储在数组中的 SelectedPaths 多个文件夹。 若要启用多个文件夹,请设置为 Multiselecttrue
.
System.Drawing 库进行了许多改进,包括包装 GDI+ 效果、支持ReadOnlySpan
和更好的互操作代码生成。
System.Drawing 库现在支持 GDI+ 位图效果,例如模糊和淡色。 效果是 GDI+ 的一部分,但直到现在才通过 System.Drawing 公开效果。
通过调用Bitmap该方法将效果应用于该Bitmap.ApplyEffect(Effect, Rectangle)效果。 为要应用效果的区域提供效果和可选 Rectangle
效果。 用于 Rectangle.Empty 处理整个映像。
命名空间 System.Drawing.Imaging.Effects 包含可应用的效果:
- BlackSaturationCurveEffect
- BlurEffect
- BrightnessContrastEffect
- ColorBalanceEffect
- ColorCurveEffect
- ColorLookupTableEffect
- ColorMatrixEffect
- ContrastCurveEffect
- CurveChannel
- DensityCurveEffect
- ExposureCurveEffect
- GrayScaleEffect
- HighlightCurveEffect
- InvertEffect
- LevelsEffect
- MidtoneCurveEffect
- ShadowCurveEffect
- SharpenEffect
- TintEffect
- VividEffect
- WhiteSaturationCurveEffect
已增强接受数组的许多方法也接受 ReadOnlySpan
。 例如,方法(例如 GraphicsPath.AddLines(ReadOnlySpan<Point>), Graphics.DrawLines(Pen, ReadOnlySpan<Point>)和 DrawPolygon(Pen, ReadOnlySpan<Point>))接受数组或 ReadOnlySpan
。
所有互操作代码已替换为 C# P/Invoke 源生成器 CsWin32。
以下改进已添加到 ToolStrip 控件中 ToolStripItem 。
已向
ToolStrip
<a0/a0> 添加了一个新属性。 设置为 “
true
设置为”时,控件可以在窗体未对焦时与控件交互。
在发布 .NET Core 3.1 时, Menu
删除了所有相关控件,例如 MainMenu
和 MenuItem
/ ToolStrip
应 ToolStripMenuItem
改为使用。 但是,ToolStripItem
基类没有替代事件的ToolStripMenuItem
基类MenuItem.Select
。 当鼠标或键盘用于突出显示项时,将引发此事件。
.NET 9 已添加 ToolStripItem.SelectedChanged,可用于检测何时突出显示菜单项。
其他资源
培训
学习路径
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization