Megosztás a következőn keresztül:


A .NET 9-hez készült Windows Forms újdonságai

Ez a cikk a .NET 9-hez készült Windows Forms újdonságait ismerteti.

Aszinkron űrlapok

Fontos

Ez a funkciókészlet kísérleti jellegű, kivéve Control.InvokeAsync.

A modern alkalmazások aszinkron kommunikációs modelleket igényelnek. A Windows Forms .NET-en való megjelenésével egyre több összetevőhöz szükséges egy async metódust használni a felhasználói felületen való futtatáshoz. Például olyan vezérlők, mint WebView2, natív Windows 10 és Windows 11 API-k, vagy modern aszinkron kódtárak, például Szemantikus kernel. Egy másik forgatókönyv az lenne, ha async köré épített MVVM ViewModel-eket oszt meg más felhasználói felületi veremekből, például WPF-ből, WinUI-ból vagy .NET MAUI-ból származó Windows Formsokkal.

Az aszinkron forgatókönyvek támogatásához hozzáadott új metódusok listája:

Ez az API egy fordítóhiba mögött van védve, mert kísérleti. A hiba megszüntetéséhez és az API-hoz való hozzáférés engedélyezéséhez adja hozzá a következő PropertyGroup a projektfájlhoz:

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

Borravaló

A szabály letiltásáról további információt Fordítási hiba WFO5002című témakörben talál.

A BinaryFormatter már nem támogatott

BinaryFormatter nem biztonságos, mert sebezhető a deszerializálási támadásokkal szemben, ami szolgáltatásmegtagadáshoz (DoS), információ felfedéséhez vagy távoli kódfuttatáshoz vezethet. A deszerializálási biztonsági rések megismerése előtt implementálták, és a kialakítása nem követi a modern biztonsági ajánlott eljárásokat.

A .NET 9-től kezdve az implementációja el lett távolítva, hogy megelőzze ezeket a biztonsági kockázatokat. Ha a BinaryFormatter-t használják, a PlatformNotSupportedException kivételt kibocsátják.

A Windows Forms számos forgatókönyvben használja a BinaryFormatter-t, például amikor adatokat szerializálunk a vágólapra és a húzás-leejtés műveletekhez, és ami a legfontosabb, a Windows Forms Designer esetében. A Windows Forms belsőleg továbbra is a BinaryFormatter biztonságosabb részhalmazát használja az ismert típusokkal rendelkező konkrét használati esetek kezelésére.

A .NET 9-hez készült Windows Forms olyan elemzőkkel szállít, amelyek segítenek azonosítani a bináris szerializálásban való tudatlan részvétel idejét.

A BinaryFormattertovábbi információ: BinaryFormatterWindows Forms áttelepítési útmutatója.

Sötét mód

Fontos

Ez a funkciókészlet kísérleti jellegű.

A Sötét mód előzetes támogatása a Windows Formshoz lett hozzáadva, azzal a céllal, hogy véglegesíthesse a támogatást a .NET 10-ben. Amikor a színmód megváltozik, a SystemColors módosul, hogy megfeleljen. Az alkalmazás színmódja az alábbi értékek egyikére állítható be:

  • SystemColorMode.Classic– (alapértelmezett) Egyszerűsített mód, ugyanaz, mint a Windows Forms korábbi verziói.
  • SystemColorMode.System– Tartsa tiszteletben a Windows által beállított világos vagy sötét módot.
  • SystemColorMode.Dark– Sötét mód használata.

Színmód alkalmazásához hívja meg a Application.SetColorMode(SystemColorMode) a program indítási kódjában:

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

Ez az API egy fordítóhiba mögött van védve, mert kísérleti. A hiba megszüntetéséhez és az API-hoz való hozzáférés engedélyezéséhez adja hozzá a következő PropertyGroup a projektfájlhoz:

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

Borravaló

A szabály letiltásáról további információt Fordítási hiba WFO5001című témakörben talál.

A FolderBrowserDialog fejlesztései

FolderBrowserDialog mostantól támogatja a SelectedPaths tömbben tárolt mappák kijelölését. Több mappa engedélyezéséhez állítsa Multiselecttrueértékre.

A System.Drawing új funkciói és fejlesztései

A System.Drawing kódtár számos fejlesztésen esett át, többek között gDI+ effektusok burkolásával, ReadOnlySpantámogatásával és jobb kódlétrehozással.

A System.Drawing támogatja a GDI+ effektusokat

A System.Drawing kódtár mostantól támogatja a GDI+ bitképeffektusokat, például az elmosódást és a színárnyalatot. Az effektusok a GDI+-nak a részét képezték, de mostanáig nem voltak elérhetők a System.Drawing-ban.

A Bitmap-ra az Bitmap.ApplyEffect(Effect, Rectangle) metódus meghívásával alkalmazzák az effektusokat. Adja meg az effektust, és adjon meg egy opcionális Rectangle jelzőt az alkalmazási terület meghatározásához. A Rectangle.Empty használatával dolgozza fel a teljes képet.

A System.Drawing.Imaging.Effects névtér tartalmazza az alkalmazható effektusokat:

A System.Drawing támogatja a Span-t

Számos olyan metódus került továbbfejlesztésre, amely elfogadta a tömböket, hogy a ReadOnlySpan-t is elfogadja. Például az olyan metódusok, mint a GraphicsPath.AddLines(ReadOnlySpan<Point>), a Graphics.DrawLines(Pen, ReadOnlySpan<Point>)és a DrawPolygon(Pen, ReadOnlySpan<Point>), elfogadnak egy tömböt vagy ReadOnlySpan.

A CsWin32 használata az interophoz

Az összes interop-kód helyébe CsWin32, egy C# P/Invoke forrásgenerátor lépett.

ToolStrip

A következő fejlesztések lettek hozzáadva a ToolStrip és ToolStripItem vezérlőkhöz.

  • Új tulajdonság lett hozzáadva ToolStrip, AllowClickThrough.

    Ha trueértékre van állítva, a vezérlőelem akkor is használható, ha az űrlap nincs fókuszban.

A .NET Core 3.1 kiadásakor az összes Menukapcsolódó vezérlő, például MainMenu és MenuItemel lett távolítva. ehelyett ToolStrip és ToolStripMenuItem kell használni. A ToolStripItem, amely a ToolStripMenuItemalaposztálya, azonban nem rendelkezett helyettesítéssel a MenuItem.Select eseményhez. Ez az esemény akkor jött létre, amikor az egérrel vagy a billentyűzettel kiemelték az elemet.

A .NET 9 hozzáadott ToolStripItem.SelectedChanged, amely a menüelem kiemelésének észlelésére használható.