Udostępnij przez


Co nowego w formularzach Windows Forms dla platformy .NET 9

W tym artykule opisano nowości w programie Windows Forms dla platformy .NET 9.

Formularze asynchroniczne

Ważne

Ten zestaw funkcji jest eksperymentalny, z wyjątkiem Control.InvokeAsync.

Nowoczesne aplikacje wymagają asynchronicznych modeli komunikacji. W miarę wzrostu platformy Windows Forms na platformie .NET więcej składników wymaga marshalingu metody async do uruchomienia w wątku interfejsu użytkownika. Na przykład kontrolki takie jak WebView2, natywne interfejsy API systemu Windows 10 i Windows 11 lub nowoczesne biblioteki asynchroniczne, takie jak Semantic Kernel. Innym scenariuszem jest udostępnianie modelu MVVM ViewModels utworzonych async za pomocą interfejsu Windows Forms z innych stosów interfejsu użytkownika, takich jak WPF, WinUI lub .NET MAUI.

Poniższa lista nowych metod dodanych do obsługi scenariuszy asynchronicznych:

Ten interfejs API jest chroniony za błędem kompilatora, ponieważ jest on eksperymentalny. Aby pominąć błąd i włączyć dostęp do interfejsu API, dodaj następujący kod PropertyGroup do pliku projektu:

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

Wskazówka

Aby uzyskać więcej informacji na temat pomijania tej reguły, zobacz Błąd kompilatora WFO5002.

BinaryFormatter nie jest już obsługiwany

BinaryFormatter jest uważana za niebezpieczną, ponieważ jest podatna na ataki deserializacji, które mogą prowadzić do odmowy usługi (DoS), ujawniania informacji lub zdalnego wykonywania kodu. Została zaimplementowana przed zrozumieniem luk w zabezpieczeniach deserializacji, a jej projekt nie jest zgodna z nowoczesnymi najlepszymi rozwiązaniami w zakresie zabezpieczeń.

Począwszy od platformy .NET 9, jej implementacja została usunięta, aby zapobiec tym zagrożeniom bezpieczeństwa. Gdy używany jest BinaryFormatter, zgłaszany jest wyjątek PlatformNotSupportedException.

Formularze systemu Windows wykorzystują BinaryFormatter w różnych scenariuszach, takich jak serializacja danych dla schowka, operacje przeciągania i upuszczania, a co najważniejsze w Projektancie formularzy systemu Windows. Wewnętrznie formularze systemu Windows nadal używają bezpieczniejszego podzestawu BinaryFormatter do obsługi określonych przypadków użycia ze znanym zestawem typów.

Windows Forms dla .NET 9 jest dostarczany z analizatorami, które pomagają zidentyfikować sytuacje, w których nieświadomie biorą Państwo udział w serializacji binarnej.

Aby uzyskać więcej informacji na temat BinaryFormatter, zapoznaj się z przewodnikiem migracji formularzy Windows dla elementu BinaryFormatter.

Tryb ciemny

Ważne

Ten zestaw funkcji jest eksperymentalny.

Wstępna obsługa trybu ciemnego została dodana do formularzy Systemu Windows z celem finalizowania obsługi na platformie .NET 10. Gdy tryb kolorów zmienia się, SystemColors zostają zmienione, aby pasować. Tryb kolorów aplikacji można ustawić na jedną z następujących wartości:

  • SystemColorMode.Classic—(ustawienie domyślne) Tryb jasny, taki sam jak poprzednie wersje formularzy systemu Windows.
  • SystemColorMode.System— Przestrzegaj trybu jasnego lub ciemnego ustawionego przez system Windows.
  • SystemColorMode.Dark— Użyj trybu ciemnego.

Aby zastosować tryb kolorów, wywołaj metodę Application.SetColorMode(SystemColorMode) w kodzie uruchamiania programu:

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

Ten interfejs API jest chroniony za błędem kompilatora, ponieważ jest on eksperymentalny. Aby pominąć błąd i włączyć dostęp do interfejsu API, dodaj następujący kod PropertyGroup do pliku projektu:

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

Wskazówka

Aby uzyskać więcej informacji na temat pomijania tej reguły, zobacz Błąd kompilatora WFO5001.

Ulepszenia FolderBrowserDialog

FolderBrowserDialog Teraz obsługuje wybieranie wielu folderów, które są przechowywane w tablicy SelectedPaths . Aby włączyć wiele folderów, ustaw Multiselect na true.

System.Drawing — nowe funkcje i możliwości ulepszenia

Biblioteka System.Drawing została znacznie usprawniona, w tym poprzez zastosowanie opakowań dla efektów GDI+, obsługę ReadOnlySpan oraz lepsze generowanie kodu interoperacyjnego.

System.Drawing obsługuje efekty GDI+

Biblioteka System.Drawing obsługuje teraz efekty mapy bitowej GDI+ , takie jak rozmycie i odcień. Efekty były częścią GDI+, ale nie zostały ujawnione przez System.Drawing do tej pory.

Efekty są stosowane do obiektu Bitmap poprzez wywołanie metody Bitmap.ApplyEffect(Effect, Rectangle). Podaj efekt i opcjonalnie Rectangle dla obszaru, gdzie efekt ma być zastosowany. Użyj polecenia Rectangle.Empty , aby przetworzyć cały obraz.

System.Drawing.Imaging.Effects Przestrzeń nazw zawiera efekty, które można zastosować:

System.Drawing obsługuje funkcję Span

Wiele metod, które akceptują tablice, zostało rozszerzonych, aby również akceptować ReadOnlySpan. Na przykład metody, takie jak GraphicsPath.AddLines(ReadOnlySpan<Point>), Graphics.DrawLines(Pen, ReadOnlySpan<Point>)i DrawPolygon(Pen, ReadOnlySpan<Point>), akceptują tablicę lub ReadOnlySpan.

Użycie CsWin32 na potrzeby interoperacyjności

Cały kod międzyoperacyjny został zastąpiony przez CsWin32, generator źródła P/Invoke języka C#.

ToolStrip

Następujące ulepszenia zostały dodane do kontrolek ToolStrip i ToolStripItem.

  • Dodano nową właściwość do ToolStrip, AllowClickThrough elementu.

    Po ustawieniu na true, kontrolka może być używana, gdy formularz jest nieaktywny.

Po wydaniu platformy .NET Core 3.1 wszystkie kontrolki powiązane z Menu, takie jak MainMenu i MenuItem, zostały usunięte. ToolStrip i ToolStripMenuItem należy zamiast tego użyć. Jednak ToolStripItem, klasa bazowa dla ToolStripMenuItem, nie miała zamiennika dla zdarzenia MenuItem.Select. Zdarzenie to zostało wywołane, gdy mysz lub klawiatura była używana do wyróżnienia elementu.

W .NET 9 dodano funkcję ToolStripItem.SelectedChanged, której można użyć do wykrywania, kiedy element menu jest wyróżniony.