Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird beschrieben, was in Windows Forms für .NET 9 neu ist.
Asynchrone Formulare
Von Bedeutung
Dieser Featuresatz ist experimentell, mit Ausnahme von Control.InvokeAsync
.
Moderne Apps erfordern asynchrone Kommunikationsmodelle. Da Windows Forms auf .NET aufbaut, müssen mehr Komponenten für eine async
-Methode gemarshalt werden, um auf dem UI-Thread ausgeführt zu werden. Steuerelemente wie WebView2, systemeigene Windows 10- und Windows 11-APIs oder moderne asynchrone Bibliotheken wie Semantic Kernel. Ein weiteres Szenario wäre, dass Sie MVVM ViewModels freigeben, die um async
aufgebaut sind und mit Windows Forms von anderen UI-Stacks wie WPF, WinUI oder .NET MAUI verwendet werden.
Die folgende Liste der neuen Methoden, die zur Unterstützung asynchroner Szenarien hinzugefügt wurden:
- System.Windows.Forms.Form.ShowAsync
- Form.ShowDialogAsync
- TaskDialog.ShowDialogAsync
- Control.InvokeAsync (Diese API ist nicht experimentell.)
Diese API wird hinter einem Compilerfehler geschützt, da sie experimentell ist. Um den Fehler zu unterdrücken und den Zugriff auf die API zu aktivieren, fügen Sie Der Projektdatei Folgendes PropertyGroup
hinzu:
<PropertyGroup>
<NoWarn>$(NoWarn);WFO5002</NoWarn>
</PropertyGroup>
Tipp
Weitere Informationen zum Unterdrücken dieser Regel finden Sie unter Compilerfehler WFO5002.
BinaryFormatter wird nicht mehr unterstützt
BinaryFormatter
wird als unsicher angesehen, da sie anfällig für Deserialisierungsangriffe ist, was zu Denial of Service (DoS), zur Offenlegung von Informationen oder zur Remotecodeausführung führen kann. Es wurde implementiert, bevor Deserialisierungsrisiken gut verstanden wurden, und sein Entwurf folgt nicht den bewährten Methoden für moderne Sicherheit.
Ab .NET 9 wurde die Implementierung entfernt, um diese Sicherheitsrisiken zu verhindern. Wenn BinaryFormatter
verwendet wird, wird die PlatformNotSupportedException
Ausnahme ausgelöst.
Windows Forms verwendete BinaryFormatter
in vielen Szenarien, z. B. bei der Serialisierung von Daten für die Zwischenablage und Drag-and-Drop-Vorgänge, und vor allem im Windows Forms-Designer. Intern verwendet Windows Forms weiterhin eine sicherere Teilmenge, BinaryFormatter
um bestimmte Anwendungsfälle mit einem bekannten Satz von Typen zu behandeln.
Windows Forms für .NET 9 wird mit Analysetools ausgeliefert, die Ihnen helfen, Zeiten zu identifizieren, in denen Sie unwissentlich an der binären Serialisierung teilnehmen.
Weitere Informationen BinaryFormatter
finden Sie im Windows Forms-Migrationshandbuch für BinaryFormatter.
Dunkler Modus
Von Bedeutung
Dieser Featuresatz ist experimentell.
Die vorläufige Unterstützung für den dunklen Modus wurde Windows Forms hinzugefügt, mit dem Ziel, den Support in .NET 10 abzuschließen. Wenn sich der Farbmodus ändert, werden die SystemColors entsprechend geändert. Der Farbmodus für die App kann auf einen der folgenden Werte festgelegt werden:
-
SystemColorMode.Classic
—(Standard) Light-Modus, identisch mit früheren Versionen von Windows Forms. -
SystemColorMode.System
– Achten Sie auf den von Windows festgelegten hellen oder dunklen Modus. -
SystemColorMode.Dark
– Verwenden Sie den dunklen Modus.
Um einen Farbmodus anzuwenden, rufen Sie Application.SetColorMode(SystemColorMode) im Programmstartcode auf.
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
Diese API wird hinter einem Compilerfehler geschützt, da sie experimentell ist. Um den Fehler zu unterdrücken und den Zugriff auf die API zu aktivieren, fügen Sie Der Projektdatei Folgendes PropertyGroup
hinzu:
<PropertyGroup>
<NoWarn>$(NoWarn);WFO5001</NoWarn>
</PropertyGroup>
Tipp
Weitere Informationen zum Unterdrücken dieser Regel finden Sie unter Compilerfehler WFO5001.
Die Verbesserungen des FolderBrowserDialogs
FolderBrowserDialog
unterstützt jetzt die Auswahl mehrerer Ordner, die im SelectedPaths Array gespeichert sind. Um mehrere Ordner zu aktivieren, legen Sie diese Multiselect Einstellung auf true
.
Neue Funktionen und Verbesserungen in System.Drawing
Die Bibliothek "System.Drawing " verfügt über viele Verbesserungen, darunter das Umschließen von GDI+-Effekten, die Unterstützung für ReadOnlySpan
und eine bessere Interopcodegenerierung.
System.Drawing unterstützt GDI+-Effekte
Die System.Drawing-Bibliothek unterstützt jetzt GDI+-Bitmap-Effekte, z. B. Unschärfe und Farbton. Effekte sind Teil von GDI+, wurden aber bisher nicht über "System.Drawing " verfügbar gemacht.
Effekte werden auf eine Bitmap angewendet, indem die Bitmap.ApplyEffect(Effect, Rectangle) Methode aufgerufen wird. Geben Sie den Effekt und ein optionales Rectangle
für den Bereich an, auf den der Effekt angewendet werden soll. Verwenden Sie Rectangle.Empty, um das gesamte Bild zu verarbeiten.
Der System.Drawing.Imaging.Effects Namespace enthält die Effekte, die Sie anwenden können:
- BlackSaturationCurveEffect
- BlurEffect
- BrightnessContrastEffect
- ColorBalanceEffect
- ColorCurveEffect
- ColorLookupTableEffect
- ColorMatrixEffect
- ContrastCurveEffect
- CurveChannel
- DensityCurveEffect
- ExposureCurveEffect
- GrayScaleEffect
- HighlightCurveEffect
- InvertEffect
- LevelsEffect
- MidtoneCurveEffect
- ShadowCurveEffect
- SharpenEffect
- TintEffect
- VividEffect
- WhiteSaturationCurveEffect
System.Drawing unterstützt Span
Viele Methoden, die Arrays akzeptierten, wurden erweitert, um auch ReadOnlySpan
zu akzeptieren. Beispielsweise akzeptieren Methoden wie GraphicsPath.AddLines(ReadOnlySpan<Point>), Graphics.DrawLines(Pen, ReadOnlySpan<Point>) und DrawPolygon(Pen, ReadOnlySpan<Point>) ein Array oder ReadOnlySpan
.
Verwenden Sie CsWin32 für die Interoperabilität
Der gesamte Interopcode wurde durch CsWin32, einen C#P/Invoke-Quellgenerator, ersetzt.
ToolStrip
Die folgenden Verbesserungen wurden den ToolStrip- und ToolStripItem-Steuerelementen hinzugefügt.
Eine neue Eigenschaft wurde hinzugefügt zu
ToolStrip
, AllowClickThrough.Wenn auf
true
gesetzt, kann mit dem Steuerelement interagiert werden, während das Formular nicht fokussiert ist.
Als .NET Core 3.1 veröffentlicht wurde, wurden alle Menu
-bezogenen Steuerelemente wie MainMenu
und MenuItem
entfernt.
ToolStrip
und ToolStripMenuItem
sollte stattdessen verwendet werden. Jedoch hatte ToolStripItem
, die Basisklasse für ToolStripMenuItem
keinen Ersatz für das Ereignis MenuItem.Select
. Dieses Ereignis wurde ausgelöst, wenn die Maus oder Tastatur verwendet wird, um das Element hervorzuheben.
.NET 9 hat ToolStripItem.SelectedChanged hinzugefügt, wodurch erkannt werden kann, wenn ein Menüelement hervorgehoben ist.
.NET Desktop feedback