.NET용 Windows Forms 9의 새로운 기능
이 문서에서는 .NET 9용 Windows Forms의 새로운 기능들을 설명합니다.
비동기 양식
Important
이 기능 집합은 Control.InvokeAsync
제외하고 실험적입니다.
최신 앱에는 비동기 통신 모델이 필요합니다. .NET에서 Windows Forms가 증가함에 따라 더 많은 구성 요소를 UI 스레드에서 실행하려면 async
메서드로 마샬링해야 합니다. 예를 들어 WebView2, 네이티브 Windows 10 및 Windows 11 API와 같은 컨트롤 또는 의미 체계 커널과 같은 최신 비동기 라이브러리가 있습니다. 또 다른 시나리오는 WPF, WinUI 또는 .NET MAUI와 같은 다른 UI 스택에서 Windows Forms를 사용하여 빌드된 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가 더 이상 지원되지 않음
BinaryFormatter
은 역직렬화 공격에 취약하여 DoS(서비스 거부), 정보 공개 또는 원격 코드 실행으로 이어질 수 있으므로 안전하지 않은 것으로 간주됩니다. 역직렬화 취약성이 잘 이해되기 전에 구현되었으며 디자인은 최신 보안 모범 사례를 따르지 않습니다.
.NET 9부터 이러한 보안 위험을 방지하기 위해 구현이 제거되었습니다. 사용되는 경우 BinaryFormatter
예외가 PlatformNotSupportedException
throw됩니다.
Windows Forms는 클립보드 및 끌어서 놓기 작업을 위해 데이터를 직렬화하는 경우와 같은 많은 시나리오에서 사용 BinaryFormatter
되며, 가장 중요한 것은 Windows Forms 디자이너입니다. 내부적으로 Windows Forms는 알려진 형식 집합으로 특정 사용 사례를 처리하기 위해 더 안전한 하위 집합 BinaryFormatter
을 계속 사용합니다.
.NET 9용 Windows Forms는 이진 serialization에 무의식적으로 참여하는 시간을 식별하는 데 도움이 되는 분석기와 함께 제공됩니다.
자세한 BinaryFormatter
내용은 BinaryFormatter에 대한 Windows Forms 마이그레이션 가이드를 참조 하세요.
어둡게 모드
Important
이 기능 집합은 실험적입니다.
.NET 10에서 지원을 완료하는 것을 목표로 어두운 모드에 대한 예비 지원이 Windows Forms에 추가되었습니다. 색 모드가 변경 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
및 더 나은 interop 코드 생성을 포함하여 많은 개선 사항이 있었습니다.
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
.
interop에 CsWin32 사용
모든 interop 코드는 C# P/Invoke 소스 생성기인 CsWin32로 대체되었습니다.
ToolStrip
및 컨트롤에 ToolStripToolStripItem 다음과 같은 개선 사항이 추가되었습니다.
에 새 속성이 추가
ToolStrip
AllowClickThrough되었습니다.설정
true
하면 폼에 초점을 맞추지 않는 동안 컨트롤과 상호 작용할 수 있습니다.
.NET Core 3.1이 릴리스되었을 때와 같은 Menu
MainMenu
모든 MenuItem
관련 컨트롤이 제거되었습니다.
ToolStrip
대신 ToolStripMenuItem
사용해야 합니다. 그러나 ToolStripItem
기본 클래스 ToolStripMenuItem
는 이벤트를 대체 MenuItem.Select
하지 않았습니다. 이 이벤트는 마우스 또는 키보드를 사용하여 항목을 강조 표시할 때 발생했습니다.
메뉴 항목이 강조 표시된 시기를 감지하는 데 사용할 수 있는 .NET 9가 추가 ToolStripItem.SelectedChanged되었습니다.
.NET Desktop feedback