.NET 11 正式发布,WinForms 和 Blazor 有哪些新功能值得关注?
.NET 11 正式发布,WinForms 和 Blazor 有哪些新功能值得关注?
.NET 11 于 2026 年 11 月 10 日正式发布了。
每年微软都会更新一次 .NET,这次 .NET 11 除了运行时和 C# 语言方面的改进,WinForms 和 Blazor 也有不少值得关注的新功能。
对于一直使用 C# 开发桌面软件、Web 管理系统的开发者来说,这次升级还是有一些实际价值的。
本文主要介绍以下内容:
- .NET 11 基础信息
- WinForms 新功能
- Blazor 新功能
- ASP.NET Core 新功能
- C# 和基础类库更新
- 升级注意事项
一、.NET 11 基本信息
.NET 11 是一个 STS(Standard Term Support)版本,支持周期为 18 个月。
目前几个主要版本:
| 版本 | 类型 | 支持周期 |
|---|---|---|
| .NET 8 | LTS | 3 年 |
| .NET 9 | STS | 18 个月 |
| .NET 10 | LTS | 3 年 |
| .NET 11 | STS | 18 个月 |
.NET 10 仍然是目前适合长期稳定运行的 LTS 版本。
如果是新项目,可以直接考虑 .NET 11。如果是已经运行多年的商业项目,则需要结合第三方组件、运行环境和部署条件决定是否升级。
安装 .NET 11
官方下载:
https://dotnet.microsoft.com/download/dotnet/11.0
安装完成后执行:
dotnet --version
查看 SDK 信息:
dotnet --info
新建项目:
dotnet new winforms -n WinForms11
dotnet new blazor -n Blazor11
WinForms 项目目标框架:
<TargetFramework>net11.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
二、WinForms 新功能
WinForms 是一个比较老牌的桌面开发框架。
虽然现在有 MAUI、WPF、WinUI 等新技术,但对于传统企业软件、POS 收银软件、仓库管理软件来说,WinForms 仍然有很大的实用价值。
.NET 11 并没有重新设计 WinForms,而是继续完善现有控件的视觉效果、系统设置适配、辅助功能和绘制性能。
这次有几个功能比较值得关注。
1. 全新的 VisualStylesMode 外观模式
这是我觉得 WinForms 本次比较值得关注的更新。
以前 WinForms 的控件外观相对传统,虽然可以通过 FlatStyle、BackColor 等属性调整,但整体效果还是比较老式。
.NET 11 增加了 VisualStylesMode,可以选择新的控件渲染方式。
支持以下模式:
- Classic:传统经典样式
- Disabled:关闭视觉样式
- Net11:使用 .NET 11 新的视觉样式
- Latest:始终使用当前运行时支持的最新样式
使用方法:
using System.Windows.Forms;
// 设置整个应用程序默认视觉样式
Application.SetDefaultVisualStylesMode(
VisualStylesMode.Net11
);
Application.Run(new Form1());
也可以单独设置某个窗体或控件:
var form = new Form1
{
Text = "NET 11 WinForms",
VisualStylesMode = VisualStylesMode.Latest
};
控件的 VisualStylesMode 具有继承行为,子控件默认可以继承父级的设置。
.NET 11 新视觉样式主要涉及:
- Button
- CheckBox
- RadioButton
- GroupBox
- TextBox
- RichTextBox
其中按钮、复选框的 FlatStyle,以及文本框的 BorderStyle 仍然会影响最终的显示效果。
新旧控件外观对比

对比项目:
| 控件 | Classic | Net11 |
|---|---|---|
| Button | 传统按钮外观 | 新视觉样式 |
| TextBox | 传统边框 | 新边框及焦点效果 |
| CheckBox | 传统勾选框 | 新视觉样式 |
| RadioButton | 传统单选框 | 新视觉样式 |
| GroupBox | 传统分组框 | 新视觉样式 |
| RichTextBox | 传统文本框 | 新视觉样式 |
特别提醒:并不是所有 WinForms 控件都使用了新的渲染方式。
以下控件不能简单认为已经全面支持 Net11 新视觉样式:
- DataGridView
- ToolStrip
- PropertyGrid
它们在 .NET 11 中也有其他方面的改进,但不代表外观已经统一切换到新的视觉渲染器。
另外,ComboBox 也不能直接按照上面列出的六种控件来理解为已经拥有相同的新渲染效果。
所以,如果你的项目大量使用 DataGridView、ToolStrip 等控件,不要期待只修改一个 VisualStylesMode 属性就能让整个软件变成 Windows 11 风格。
2. CheckBox 支持 ToggleSwitch 开关样式
这是一个非常实用的小功能。
以前如果想在 WinForms 中实现类似手机设置页面的开关效果,通常需要自己绘制控件,或者使用第三方组件。
.NET 11 为 CheckBox 增加了 ToggleSwitch 外观。
使用方法:
CheckBox toggle = new()
{
Text = "启用通知",
Appearance = Appearance.ToggleSwitch,
Checked = true
};
原来的 Checked、CheckedChanged 和数据绑定逻辑仍然可以继续使用。
例如:
toggle.CheckedChanged += (s, e) =>
{
bool enabled = toggle.Checked;
Console.WriteLine(enabled);
};
需要注意,新的开关外观需要配合 Net11 VisualStylesMode 使用。
对于系统设置、参数配置、POS 收银软件的功能开关来说,这个功能很方便。
3. 系统视觉设置变化通知
以前 WinForms 程序如果需要响应 Windows 系统主题、强调色、字体缩放等变化,往往需要自己处理不同的系统通知。
.NET 11 增加了:
Application.SystemVisualSettings
Application.SystemVisualSettingsChanged
可以获取当前系统视觉设置,例如:
- 系统强调色
- 高对比度状态
- 键盘提示状态
- 文本缩放比例
- 焦点边框相关设置
示例:
Application.SystemVisualSettingsChanged += (sender, e) =>
{
if ((e.Changed &
SystemVisualSettingsCategories.AccentColor) != 0)
{
var accent = e.NewSettings.AccentColor;
Console.WriteLine($"系统强调色:{accent}");
}
if ((e.Changed &
SystemVisualSettingsCategories.TextScale) != 0)
{
Console.WriteLine(
$"文字缩放:{e.NewSettings.TextScaleFactor:P0}"
);
}
};
这样应用程序就可以根据系统设置变化,更新相应的界面。
4. 窗体延迟显示 FormRevealMode
这个功能对于启动时需要初始化大量内容的程序比较有帮助。
以前 WinForms 窗体启动时,有时会先显示一个尚未完成主题初始化的窗口,然后再切换到最终样式,出现短暂的视觉闪烁。
.NET 11 增加了 FormRevealMode。
主要模式:
- Classic:保持原来的立即显示方式
- Deferred:延迟显示,等待初始布局和主题处理完成
- Inherit:继承应用程序默认设置
使用方法:
Application.SetDefaultVisualStylesMode(
VisualStylesMode.Net11
);
Application.SetDefaultFormRevealMode(
FormRevealMode.Deferred
);
Application.Run(new Form1());
这样可以减少应用程序启动时出现的未完成样式闪烁问题。
5. SuspendPainting 批量更新控件
这个功能我认为对传统管理系统特别有价值。
WinForms 中经常会遇到这种情况:
一个窗体上有大量控件,需要批量修改数据、调整布局。
如果每次修改控件属性都触发绘制和布局,就可能出现:
- 界面闪烁
- 重复刷新
- 布局计算次数过多
- 大量控件更新时明显卡顿
以前我们通常使用:
BeginUpdate();
EndUpdate();
或者:
SuspendLayout();
ResumeLayout();
但不同控件的实现方式不完全一样。
.NET 11 增加了统一的 ISupportSuspendPainting 接口和 SuspendPainting 扩展方法。
示例:
using System.Windows.Forms;
ListBox list = new();
using (list.SuspendPainting(
LayoutSuspendTraversal.Target))
{
for (int i = 0; i < 10000; i++)
{
list.Items.Add($"Item {i}");
}
}
退出 using 作用域后,会自动恢复绘制。
还可以使用:
LayoutSuspendTraversal.Descendants
将暂停范围扩展到目标控件及其子控件。
目前实现该接口的控件包括:
- ComboBox
- ListBox
- ListView
- RichTextBox
- TreeView
其他控件也可以使用相应的暂停机制,但具体效果取决于控件实现。
对于有大量动态控件的业务系统,这个功能值得测试。
6. KioskModeManager 自助终端模式
这个功能我特别想提一下。
很多 WinForms 软件并不是普通桌面程序,而是运行在触摸屏、自助终端或者 POS 收银机上。
例如:
- 自助点餐机
- 自助结账机
- POS 收银终端
- 工厂生产信息终端
- 商场查询终端
以前实现全屏模式、鼠标自动隐藏、防止系统休眠等功能,通常需要自己编写不少代码。
.NET 11 增加了 KioskModeManager。
示例:
using System.Windows.Forms;
ApplicationConfiguration.Initialize();
Form form = new()
{
Text = "POS Kiosk"
};
using KioskModeManager kioskMode = new()
{
ContainerControl = form,
ToggleFullScreenKeys = Keys.F11,
EscapeExitsFullScreen = true,
TopMostInFullScreen = true,
AlwaysOn = true,
MousePointerAutoHideDelay = 3000,
FullScreen = true
};
Application.Run(form);
可以实现:
- 全屏显示
- F11 切换全屏
- ESC 退出全屏
- 全屏时保持窗口置顶
- 鼠标长时间不活动时自动隐藏
- 防止显示器和系统进入休眠
对于 POS 和自助终端软件来说,这是一个很实用的更新。
需要说明的是,KioskModeManager 是应用程序层面的全屏和运行体验管理,并不等同于 Windows 操作系统的 Assigned Access(分配的访问权限)或真正的系统级锁定模式。
三、Blazor 新功能
Blazor 是我比较关注的方向。
.NET 11 在 Blazor 上增加了不少功能,特别是表单验证、静态 SSR、Interactive Server 和大数据列表方面。
1. Static SSR 支持客户端表单验证
这是一个非常实用的改进。
以前 Blazor Static SSR 模式下,表单验证主要依靠服务器端处理。
用户提交表单后,服务器进行验证,再返回验证结果。
.NET 11 为 Static SSR 增加了客户端验证支持。
例如:
<EditForm Model="@Model" OnValidSubmit="Submit">
<DataAnnotationsValidator />
<div>
<label>用户名</label>
<InputText @bind-Value="Model.Name" />
<ValidationMessage For="@(() => Model.Name)" />
</div>
<button type="submit">提交</button>
</EditForm>
Model:
public class UserModel
{
[Required(ErrorMessage = "请输入用户名")]
public string? Name { get; set; }
}
现在 Static SSR 也可以获得客户端即时验证体验。
而且验证规则仍然以 .NET Model 中的 DataAnnotations 为基础,不需要另外维护一套 JavaScript 验证规则。
这对于希望使用 SSR,又不希望牺牲表单体验的项目来说是一个不错的改进。
2. 支持异步表单验证
这是我认为业务系统特别值得关注的功能。
以前 DataAnnotations 主要用于同步验证。
例如:
[Required]
[StringLength(20)]
public string? UserName { get; set; }
但有些业务验证需要访问数据库。
例如:
- 检查用户名是否已经存在
- 检查商品编码是否重复
- 检查客户编号是否有效
- 检查某个业务记录是否已经被其他用户使用
这些验证通常需要异步查询数据库。
.NET 11 增加了异步 DataAnnotations 验证支持。
相关 API 包括:
AsyncValidationAttribute
IAsyncValidatableObject
可以编写异步验证规则,验证时通过 await 等待数据库查询或者远程 API 调用。
Blazor 的 EditForm 也可以等待异步验证完成后再提交。
对于使用 FreeSql、EF Core 等 ORM 的业务系统,这个功能值得尝试。
以前可能需要在提交按钮事件中自己写一套检查逻辑,现在可以将更多验证规则统一放到 Model 验证体系中。
需要注意,异步验证访问数据库时仍然要考虑依赖注入、验证上下文以及并发问题,不能简单地在 Attribute 内部随意创建数据库连接。
3. 新增 CacheView 组件
这是一个比较有意思的功能。
Blazor 新增了 CacheView 组件,用于缓存静态 SSR 模式下某个组件区域的渲染结果。
假设一个管理后台页面有:
- 系统菜单
- 用户信息
- 统计数据
- 固定的说明内容
- 一些不经常变化的页面区域
其中某些内容每次请求都重新生成,实际上没有必要。
CacheView 可以缓存组件子树渲染出来的 HTML。
缓存命中时,Blazor 可以直接重放已经生成的标记,而不需要重新创建这些子组件,也不需要执行它们的生命周期方法。
需要注意:
CacheView 主要针对静态服务器端渲染,不是把整个 Blazor 应用变成浏览器缓存,也不能简单理解成 Interactive Server 的组件状态缓存。
另外,缓存内容如果包含用户相关信息,需要特别注意缓存隔离,避免不同用户看到不属于自己的内容。
4. Interactive Server 自动暂停 Circuit
这是一个值得关注的性能优化。
Blazor Interactive Server 的工作方式是:
浏览器通过 SignalR 与服务器保持连接,用户的组件状态和交互逻辑主要运行在服务器端。
如果一个系统有大量用户同时打开页面,即使用户暂时没有操作,每个用户也可能占用服务器资源。
.NET 11 增加了自动暂停 Circuit 的能力。
当浏览器标签页进入非活动状态一段时间后,可以根据配置暂停对应的 Circuit。
这样可以释放非活动用户占用的部分服务器内存和 SignalR 连接资源。
对于用户数量比较多的 SaaS 管理系统,这个功能值得关注。
注意:这是一个需要额外安装组件包并显式配置的功能,不是升级 .NET 11 后自动生效。
5. QuickGrid 和 Virtualize 增强
Blazor 中处理大数据列表时,经常会使用 QuickGrid 和 Virtualize。
.NET 11 对这两个组件进行了增强,增加了定位到指定项目的能力。
例如:
一个商品列表有几万条数据,用户打开商品详情后返回列表,希望回到刚才的位置。
新的定位能力可以帮助实现这类交互。
对于商品管理、库存管理、订单列表等场景比较实用。
6. Blazor AI Components
.NET 11 还增加了 Blazor AI 组件。
相关 NuGet 包:
dotnet add package Microsoft.AspNetCore.Components.AI
主要提供:
- 流式 AI 聊天界面
- 工具调用结果展示
- 用户审批交互
- 共享 UI 状态
- Agent 与 UI 之间的交互
可以用来构建 AI 聊天窗口,以及能够调用业务工具的智能管理界面。
例如:
在后台系统中,用户输入:
「查询今天销售额最高的五个商品」
AI Agent 调用后台业务接口,获取数据,再通过 Blazor 界面展示结果。
另外,微软还提供了 AG-UI .NET 集成,用于连接远程 Agent 和 Blazor UI。
需要特别说明:Blazor AI Components 目前仍然是实验性功能,相关 NuGet 包仍属于预发布状态,不建议直接作为稳定业务功能的基础依赖。
四、ASP.NET Core 11 其他更新
除了 Blazor 本身,ASP.NET Core 也有一些值得关注的变化。
1. OpenAPI 3.2
.NET 11 默认生成 OpenAPI 3.2 格式的文档。
对于使用 Minimal API、Controller API 的项目,可以获得更完整的 API 描述。
特别是 Server-Sent Events(SSE)事件流,现在可以更好地描述不同事件对应的数据结构。
如果使用旧版本的 API 生成工具,需要注意兼容性。
2. SignalR 身份验证刷新
以前 SignalR 长连接建立之后,如果用户的身份验证信息发生变化,通常需要重新建立连接。
.NET 11 增加了连接身份验证刷新的能力。
Blazor Interactive Server 可以接收更新后的身份信息,并响应 Claims 的变化。
对于需要长时间保持连接的业务系统,这个改进比较有价值。
3. ASP.NET Core 支持 Union 类型
.NET 11 配合 C# 15 带来了 Union Types 相关能力。
简单来说,就是可以明确表达一个对象可能属于哪些类型,而不是到处使用 object 或者多个 Nullable 属性来表达不同状态。
对于 API 返回结果、业务状态、消息类型等场景,可以让代码表达得更加明确。
ASP.NET Core 在 Minimal API 和 MVC 中也支持通过 System.Text.Json 处理 Union 类型。
目前这项支持主要针对 JSON 请求和响应内容,不代表路由参数、Query、Header、Form 等所有绑定方式都支持相同的行为。
五、C# 和基础类库更新
除了 WinForms 和 Blazor,这次基础类库也增加了不少内容。
1. Zstandard 压缩支持
System.IO.Compression 增加了 Zstandard 压缩支持。
Zstandard 是一种比较流行的压缩算法,在压缩速度和压缩率之间有不错的平衡。
对于需要处理大量文件、备份数据、网络传输的应用程序,可以考虑使用。
2. System.Text.Json 增强
JSON 序列化和反序列化继续完善,包括:
- JSON Lines(JSONL)支持
- 更丰富的多态类型支持
- Union 类型支持
- Source Generation 改进
对于经常处理 API、JSON 配置、数据导入导出的项目比较有帮助。
3. Process 进程管理增强
Process 类增加了新的 API。
包括:
- 更方便的启动并捕获输出
- 后台启动进程
- 挂起状态启动进程
- 更方便的进程查询
- 进程信号处理
对于需要调用外部程序、执行脚本、管理子进程的桌面软件和服务器程序来说,这些功能值得研究。
4. Decimal32、Decimal64、Decimal128
增加了 IEEE 754 十进制浮点类型。
对于涉及财务、金额、精度计算的应用程序,这是一个值得关注的方向。
不过,不能简单理解为可以直接把现有的 decimal 全部替换掉,实际使用还需要考虑数据库映射、序列化以及第三方组件支持。
六、升级 .NET 11 的注意事项
如果准备将现有项目升级到 .NET 11,可以先从修改 TargetFramework 开始。
例如:
<PropertyGroup>
<TargetFramework>net11.0</TargetFramework>
</PropertyGroup>
WinForms 项目:
<PropertyGroup>
<TargetFramework>net11.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>
升级时建议重点检查:
- 第三方 NuGet 包是否支持 .NET 11。
- BootstrapBlazor 等 UI 组件库是否有对应版本。
- FreeSql、数据库驱动是否兼容。
- WinForms 自定义控件的绘制效果。
- DataGridView、ToolStrip 等控件的兼容性。
- Blazor SSR、Interactive Server 的身份验证和路由。
- 发布时的运行时依赖和部署环境。
尤其是 WinForms 老项目,建议先保留原有分支,不要直接在生产项目上修改。
另外,启用新的 VisualStylesMode 后,控件的 PreferredSize、Padding 和布局尺寸可能发生变化。
建议优先使用 TableLayoutPanel 和 FlowLayoutPanel,减少对固定坐标和固定像素尺寸的依赖。
七、总结
.NET 11 这次更新,我个人比较关注的是以下几个方向:
| 功能 | 个人关注度 | 主要用途 |
|---|---|---|
| WinForms VisualStylesMode | 高 | 桌面程序界面更新 |
| WinForms ToggleSwitch | 高 | 设置开关 |
| WinForms SuspendPainting | 高 | 减少批量更新时的闪烁 |
| WinForms KioskModeManager | 高 | POS、自助终端 |
| Blazor 异步验证 | 高 | 业务表单、数据库验证 |
| Blazor Static SSR 验证 | 高 | 改善静态 SSR 表单体验 |
| CacheView | 中 | 静态页面渲染缓存 |
| Circuit 自动暂停 | 高 | 降低服务器资源占用 |
| QuickGrid / Virtualize | 中 | 大数据列表 |
| Blazor AI Components | 中 | AI 智能业务界面 |
| C# Union Types | 中 | 更清晰的业务类型表达 |
如果是传统 WinForms 项目,这次升级可以重点关注新的视觉样式、批量绘制优化和 KioskModeManager。
如果是 Blazor 项目,我更建议关注异步表单验证、Static SSR 客户端验证和 Interactive Server 的 Circuit 暂停。
这些功能比单纯的语法变化更容易在实际项目中产生价值。
.NET 11 已经正式发布,可以开始尝试新建测试工程,逐步验证现有项目的兼容性。
官方资料:
- .NET 11 发布说明:https://devblogs.microsoft.com/dotnet/announcing-dotnet-11/
- .NET 11 What's New:https://learn.microsoft.com/dotnet/core/whats-new/dotnet-11/overview
- WinForms .NET 11:https://learn.microsoft.com/dotnet/desktop/winforms/whats-new/net110
- ASP.NET Core 11:https://learn.microsoft.com/aspnet/core/release-notes/aspnetcore-11
AlexChow
Blazor / WinForms / MAUI / C#
关联项目
FreeSql QQ群:4336577
BA & Blazor QQ群:795206915
Maui Blazor 中文社区 QQ群:645660665
知识共享许可协议
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名AlexChow(包含链接: https://github.com/densen2014 ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系 。
转载声明
本文来自博客园,作者:周创琳 AlexChow,转载请注明原文链接:https://www.cnblogs.com/densen2014/p/23632538
AlexChow
今日头条 | 博客园 | 知乎 | Gitee | GitHub


浙公网安备 33010602011771号