Sdílet prostřednictvím


Novinky v model Windows Forms pro .NET 9

Tento článek popisuje, co je nového v model Windows Forms pro .NET 9.

Asynchronní formuláře

Důležité

Tato sada funkcí je experimentální, s výjimkou Control.InvokeAsync.

Moderní aplikace vyžadují asynchronní komunikační modely. Jak model Windows Forms roste na platformě .NET, více komponent vyžaduje zařazování do async metody pro spuštění ve vlákně uživatelského rozhraní. Například ovládací prvky jako WebView2, nativní rozhraní API pro Windows 10 a Windows 11 nebo moderní asynchronní knihovny, jako je sémantické jádro. Dalším scénářem je sdílení modelů Zobrazení MVVM vytvořených pomocí async model Windows Forms z jiných zásobníků uživatelského rozhraní, jako je WPF, WinUI nebo .NET MAUI.

Následující seznam nových metod přidaných pro podporu asynchronních scénářů:

Toto rozhraní API je chráněné za chybou kompilátoru, protože je experimentální. Pokud chcete potlačit chybu a povolit přístup k rozhraní API, přidejte do souboru projektu následující PropertyGroup :

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

Tip

Další informace o potlačení tohoto pravidla naleznete v tématu Chyba kompilátoru WFO5002.

BinaryFormatter se už nepodporuje

BinaryFormatter je považována za nebezpečná, protože je zranitelná vůči útokům deserializace, což může vést k odepření služby (DoS), zpřístupnění informací nebo vzdálenému spuštění kódu. Byla implementována dříve, než byla ohrožení zabezpečení deserializace dobře pochopena, a její návrh neodpovídá moderním osvědčeným postupům zabezpečení.

Počínaje rozhraním .NET 9 byla jeho implementace odstraněna, aby se zabránilo těmto rizikům zabezpečení. Při BinaryFormatter použití je vyvolán PlatformNotSupportedException výjimka.

model Windows Forms se používají BinaryFormatter v mnoha scénářích, jako je serializace dat pro schránku a operace přetažení a nejdůležitější je model Windows Forms Designer. Interně model Windows Forms nadále používá bezpečnější podmnožinu BinaryFormatter pro zpracování konkrétních případů použití se známou sadou typů.

model Windows Forms pro .NET 9 se dodává s analyzátory, které vám pomůžou identifikovat časy, kdy se nevědomě účastníte binární serializace.

Další informace o BinaryFormatternástroji BinaryFormatter najdete v tématu model Windows Forms průvodce migrací.

Tmavý režim

Důležité

Tato sada funkcí je experimentální.

Do model Windows Forms byla přidána předběžná podpora tmavého režimu s cílem dokončit podporu v .NET 10. Když se barevný režim změní, změní se SystemColors tak, aby odpovídaly. Barevný režim aplikace lze nastavit na jednu z následujících hodnot:

  • SystemColorMode.Classic– (výchozí) Světlý režim, stejný jako předchozí verze model Windows Forms.
  • SystemColorMode.System– Respektujte světlý nebo tmavý režim nastavený systémem Windows.
  • SystemColorMode.Dark– Používejte tmavý režim.

Pokud chcete použít barevný režim, zavolejte Application.SetColorMode(SystemColorMode) do spouštěcího kódu 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

Toto rozhraní API je chráněné za chybou kompilátoru, protože je experimentální. Pokud chcete potlačit chybu a povolit přístup k rozhraní API, přidejte do souboru projektu následující PropertyGroup :

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

Tip

Další informace o potlačení tohoto pravidla naleznete v tématu Chyba kompilátoru WFO5001.

Vylepšení FolderBrowserDialog

FolderBrowserDialog nyní podporuje výběr více složek, které jsou uloženy SelectedPaths v poli. Pokud chcete povolit více složek, nastavte Multiselect hodnotu true.

System.Drawing new features and enhancements

Knihovna System.Drawing má mnoho vylepšení, včetně zabalení efektů GDI+ a podpory pro ReadOnlySpana lepší generování kódu vzájemné spolupráce.

System.Drawing podporuje efekty GDI+

Knihovna System.Drawing nyní podporuje rastrové efekty GDI+ , jako je rozostření a barevný nádech. Efekty byly součástí rozhraní GDI+, ale dosud nebyly zpřístupněny prostřednictvím System.Drawing .

Efekty se použijí na Bitmap volání Bitmap.ApplyEffect(Effect, Rectangle) metody. Zadejte efekt a volitelně Rectangle pro oblast, na které se má efekt použít. Slouží Rectangle.Empty ke zpracování celého obrázku.

Obor System.Drawing.Imaging.Effects názvů obsahuje efekty, které můžete použít:

System.Drawing podporuje span

Mnoho metod, které akceptovaly pole, byly vylepšeny tak, aby také přijímat ReadOnlySpan. Například metody, jako GraphicsPath.AddLines(ReadOnlySpan<Point>)je , Graphics.DrawLines(Pen, ReadOnlySpan<Point>)a DrawPolygon(Pen, ReadOnlySpan<Point>), přijímají pole nebo ReadOnlySpan.

Použití CsWin32 pro interoperabilitu

Veškerý kód vzájemné spolupráce byl nahrazen CsWin32, generátorem zdrojového kódu C# P/Invoke.

ToolStrip

Do ovládacích ToolStrip prvků a ToolStripItem ovládacích prvků jsme přidali následující vylepšení.

  • Byla přidána nová vlastnost do ToolStrip, AllowClickThrough.

    Pokud je nastavená hodnota true, může být ovládací prvek v době, kdy je formulář nezaostřený.

Po vydání rozhraní .NET Core 3.1 se odebraly všechny Menuovládací prvky související s těmito funkcemi, například MainMenu a MenuItem. ToolStrip a ToolStripMenuItem měla by být použita. ToolStripItemZákladní třída pro ToolStripMenuItemvšak neměla náhradu MenuItem.Select za událost. Tato událost byla vyvolána při použití myši nebo klávesnice ke zvýraznění položky.

Přidali jsme ToolStripItem.SelectedChangedrozhraní .NET 9, které lze použít ke zjištění, kdy je položka nabídky zvýrazněná.