Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описаны новые возможности Windows Forms для .NET 9.
Асинхронные формы
Это важно
Этот набор функций является экспериментальным, за исключением Control.InvokeAsync
.
Для современных приложений требуются асинхронные модели взаимодействия. По мере роста Windows Forms в .NET больше компонентов требуют маршалинга async
в метод для запуска в потоке пользовательского интерфейса. Например, элементы управления, такие как WebView2, собственные API Windows 10 и Windows 11, или современные асинхронные библиотеки, такие как семантический ядро. Другим сценарием будет обмен MVVM ViewModels, сосредоточенных вокруг async
, с Windows Forms из других стеков пользовательского интерфейса, таких как WPF, WinUI или .NET MAUI.
Ниже приведен список новых методов, добавленных для поддержки асинхронных сценариев:
- System.Windows.Forms.Form.ShowAsync
- Form.ShowDialogAsync
- TaskDialog.ShowDialogAsync
- Control.InvokeAsync (этот API не является экспериментальным.)
Этот API охраняется ошибкой компилятора, так как она экспериментальна. Чтобы отключить ошибку и включить доступ к API, добавьте следующее PropertyGroup
в файл проекта:
<PropertyGroup>
<NoWarn>$(NoWarn);WFO5002</NoWarn>
</PropertyGroup>
Подсказка
Дополнительные сведения о подавлении этого правила см. в разделе "Ошибка компилятора" WFO5002.
BinaryFormatter больше не поддерживается
BinaryFormatter
считается небезопасным, поскольку он уязвим для атак десериализации, что может привести к отказу в обслуживании (DoS), раскрытию информации или удаленному выполнению кода. Она была реализована до того, как уязвимости десериализации были хорошо поняты, и его дизайн не соответствует современным рекомендациям по обеспечению безопасности.
Начиная с .NET 9, его реализация была удалена, чтобы предотвратить эти риски безопасности. Когда используется BinaryFormatter
, выбрасывается исключение PlatformNotSupportedException
.
Windows Forms используется во многих сценариях, например, при сериализации данных для операций с буфером обмена и перетаскиванием, и, что наиболее важно, в конструкторе Windows Forms. Внутри системы Windows Forms продолжает использовать более безопасное подмножество BinaryFormatter
для обработки конкретных вариантов использования с известным набором типов.
Windows Forms для .NET 9 включает анализаторы, которые помогают определить случаи, когда вы неосознанно участвуете в двоичной сериализации.
Дополнительные сведения см. в руководстве по BinaryFormatter
миграции Windows Forms для BinaryFormatter.
Темный режим
Это важно
Этот набор функций является экспериментальным.
Предварительная поддержка темного режима добавлена в Windows Forms с целью завершения поддержки в .NET 10. При изменении цветового режима SystemColors изменяются, чтобы соответствовать. В цветовом режиме приложения можно задать одно из следующих значений:
-
SystemColorMode.Classic
— (по умолчанию) Режим освещения, аналогичный предыдущим версиям Windows Forms. -
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)
FolderBrowserDialog
теперь поддерживает выбор нескольких папок, которые хранятся в массиве SelectedPaths . Чтобы включить несколько папок, установите Multiselect в true
.
Новые функции и усовершенствования в System.Drawing
Библиотека System.Drawing получила много улучшений, включая обёртки эффектов GDI+, поддержку ReadOnlySpan
, и улучшенное создание кода для взаимодействия.
System.Drawing поддерживает эффекты GDI+
Библиотека 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
System.Drawing поддерживает Span
Многие методы, принимаюющие массивы, также были улучшены для принятия ReadOnlySpan
. Например, такие методы, как GraphicsPath.AddLines(ReadOnlySpan<Point>), Graphics.DrawLines(Pen, ReadOnlySpan<Point>), и DrawPolygon(Pen, ReadOnlySpan<Point>), принимают массив или ReadOnlySpan
.
Используйте CsWin32 для взаимодействия
Весь код взаимодействия заменен генератором исходного кода C# P/Invoke CsWin32.
ТулСтрип
Следующие улучшения добавлены в ToolStrip элементы управления и ToolStripItem элементы управления.
Новое свойство было добавлено в
ToolStrip
, AllowClickThrough.Если задано значение
true
, элемент управления можно взаимодействовать с тем, как форма не сфокусирована.
После выпуска .NET Core 3.1 все Menu
связанные элементы управления, такие как MainMenu
и MenuItem
, были удалены.
ToolStrip
вместо ToolStripMenuItem
этого следует использовать. Тем не менее, ToolStripItem
базовый класс для ToolStripMenuItem
не имел замены для события MenuItem.Select
. Это событие возникает при использовании мыши или клавиатуры для выделения элемента.
Добавлен ToolStripItem.SelectedChanged.NET 9, который можно использовать для обнаружения выделения элемента меню.
.NET Desktop feedback