Partager via


Nouveautés de Windows Forms pour .NET 9

Cet article décrit les nouveautés de Windows Forms pour .NET 9.

Formulaires asynchrones

Important

Cet ensemble de fonctionnalités est expérimental, à l’exception de Control.InvokeAsync.

Les applications modernes nécessitent des modèles de communication asynchrones. À mesure que Windows Forms a augmenté sur .NET, d’autres composants nécessitent un marshaling vers une async méthode pour s’exécuter sur le thread d’interface utilisateur. Par exemple, des contrôles tels que WebView2, des API Windows 10 et Windows 11 natives ou des bibliothèques asynchrones modernes telles que le noyau sémantique. Un autre scénario serait l’endroit où vous partagez des ViewModels MVVM créés avec async Windows Forms à partir d’autres piles d’interface utilisateur telles que WPF, WinUI ou .NET MAUI.

Voici une liste de nouvelles méthodes ajoutées pour prendre en charge les scénarios asynchrones :

Cette API est protégée derrière une erreur du compilateur, car elle est expérimentale. Pour supprimer l’erreur et activer l’accès à l’API, ajoutez ce qui suit PropertyGroup à votre fichier projet :

<PropertyGroup>
    <NoWarn>$(NoWarn);WFO5002</NoWarn>
</PropertyGroup>

Conseil

Pour plus d’informations sur la suppression de cette règle, consultez WFO5002 d’erreur du compilateur.

BinaryFormatter n’est plus pris en charge

BinaryFormatter est considéré comme dangereux, car il est vulnérable aux attaques de désérialisation, ce qui peut entraîner un déni de service (DoS), une divulgation d’informations ou une exécution de code à distance. Elle a été implémentée avant que les vulnérabilités de désérialisation aient été bien comprises et sa conception ne respecte pas les meilleures pratiques de sécurité modernes.

À compter de .NET 9, son implémentation a été supprimée pour éviter ces risques de sécurité. Quand BinaryFormatter elle est utilisée, l’exception PlatformNotSupportedException est levée.

Windows Forms utilisé BinaryFormatter dans de nombreux scénarios, comme lors de la sérialisation des données pour les opérations de presse-papiers et de glisser-déplacer, et plus important encore, le Concepteur Windows Forms. En interne, Windows Forms continue d’utiliser un sous-ensemble plus sûr de BinaryFormatter gérer des cas d’usage spécifiques avec un ensemble connu de types.

Windows Forms pour .NET 9 est fourni avec des analyseurs qui vous aident à identifier les fois où vous participez à la sérialisation binaire.

Pour plus d’informations sur BinaryFormatter, consultez le guide de migration windows Forms pour BinaryFormatter.

Mode sombre

Important

Cet ensemble de fonctionnalités est expérimental.

La prise en charge préliminaire du mode sombre a été ajoutée à Windows Forms, avec l’objectif de finaliser la prise en charge dans .NET 10. Lorsque le mode de couleur change, celui-ci SystemColors est modifié pour correspondre. Le mode de couleur de l’application peut être défini sur l’une des valeurs suivantes :

  • SystemColorMode.Classic—(valeur par défaut) Mode clair, identique aux versions précédentes de Windows Forms.
  • SystemColorMode.System— Respectez le mode clair ou sombre défini par Windows.
  • SystemColorMode.Dark— Utiliser le mode sombre.

Pour appliquer un mode couleur, appelez Application.SetColorMode(SystemColorMode) le code de démarrage du programme :

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

Cette API est protégée derrière une erreur du compilateur, car elle est expérimentale. Pour supprimer l’erreur et activer l’accès à l’API, ajoutez ce qui suit PropertyGroup à votre fichier projet :

<PropertyGroup>
    <NoWarn>$(NoWarn);WFO5001</NoWarn>
</PropertyGroup>

Conseil

Pour plus d’informations sur la suppression de cette règle, consultez WFO5001 d’erreur du compilateur.

Améliorations apportées à FolderBrowserDialog

FolderBrowserDialog prend désormais en charge la sélection de plusieurs dossiers, qui sont stockés dans le SelectedPaths tableau. Pour activer plusieurs dossiers, définissez sur Multiselecttrue.

Fonctionnalités et améliorations de System.Drawing

La bibliothèque System.Drawing a apporté de nombreuses améliorations, notamment l’habillage des effets GDI+, la prise en charge ReadOnlySpande la génération de code d’interopérabilité et une meilleure génération de code d’interopérabilité.

System.Drawing prend en charge les effets GDI+

La bibliothèque System.Drawing prend désormais en charge les effets bitmap GDI+, tels que le flou et la teinte. Les effets ont été une partie de GDI+, mais n’ont pas été exposés via System.Drawing jusqu’à présent.

Les effets sont appliqués à un Bitmap en appelant la Bitmap.ApplyEffect(Effect, Rectangle) méthode. Fournissez l’effet et un facultatif Rectangle pour que la zone applique l’effet. Permet Rectangle.Empty de traiter l’image entière.

L’espace System.Drawing.Imaging.Effects de noms contient les effets que vous pouvez appliquer :

System.Drawing prend en charge Span

De nombreuses méthodes qui ont accepté des tableaux ont été améliorées pour accepter ReadOnlySpanégalement . Par exemple, des méthodes telles que GraphicsPath.AddLines(ReadOnlySpan<Point>), Graphics.DrawLines(Pen, ReadOnlySpan<Point>)et DrawPolygon(Pen, ReadOnlySpan<Point>), acceptent un tableau ou ReadOnlySpan.

Utiliser CsWin32 pour l’interopérabilité

Tout le code d’interopérabilité a été remplacé par CsWin32, un générateur source C# P/Invoke.

ToolStrip

Les améliorations suivantes ont été ajoutées aux contrôles et ToolStrip aux ToolStripItem contrôles.

  • Une nouvelle propriété a été ajoutée à ToolStrip, AllowClickThrough.

    Lorsque la valeur est définie true, le contrôle peut être interagissant pendant que le formulaire n’est pas concentré.

Retour lorsque .NET Core 3.1 a été publié, tous les Menucontrôles connexes, tels que MainMenu et MenuItem, ont été supprimés. ToolStrip et ToolStripMenuItem doit être utilisé à la place. Toutefois, ToolStripItemla classe de base pour ToolStripMenuItem, n’a pas été remplacée par l’événement MenuItem.Select . Cet événement a été déclenché lorsque la souris ou le clavier est utilisé pour mettre en surbrillance l’élément.

.NET 9 a ajouté ToolStripItem.SelectedChanged, qui peut être utilisé pour détecter lorsqu’un élément de menu est mis en surbrillance.