共用方式為


適用於 .NET 9 的 Windows Forms 新功能

本文說明適用於 .NET 9 的 Windows Forms 新功能。

異步表單

重要

這項功能集是實驗性的,但 Control.InvokeAsync除外。

新式應用程式需要異步通訊模型。 隨著 Windows Forms 在 .NET 上成長,更多元件需要封送處理至 async 在 UI 線程上執行的方法。 例如,WebView2、原生 Windows 10 和 Windows 11 API 之類的控件,或語意核心新式異步連結庫。 另一個案例是,您要從 WPF、WinUI 或 .NET MAUI 等其他 UI 堆棧共用以 Windows Forms 建 async 置的 MVVM ViewModel。

下列新增至支援異步案例的新方法清單:

此 API 在編譯程式錯誤後方受到防護,因為它是實驗性的。 若要隱藏錯誤並啟用 API 的存取權,請將下列內容 PropertyGroup 新增至您的項目檔:

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

提示

如需如何隱藏此規則的詳細資訊,請參閱 編譯程式錯誤WFO5002

不再支援 BinaryFormatter

BinaryFormatter 被視為不安全,因為它容易受到還原串行化攻擊,這可能會導致阻斷服務 (DoS)、資訊洩漏或遠端程式代碼執行。 在還原串行化弱點已充分瞭解之前實作,其設計不會遵循新式安全性最佳做法。

從 .NET 9 開始,其實作已移除,以防止這些安全性風險。 使用 時 BinaryFormatterPlatformNotSupportedException 會擲回例外狀況。

許多案例中使用的 BinaryFormatter Windows Forms,例如串行化剪貼簿和拖放作業的數據,最重要的是 Windows Forms 設計工具。 就內部而言,Windows Forms 會繼續使用更安全的 BinaryFormatter 子集來處理具有已知類型的特定使用案例。

適用於 .NET 9 的 Windows Forms 隨附分析器,可協助您識別不知情參與二進位串行化的時間。

如需 的詳細資訊 BinaryFormatter,請參閱 BinaryFormatter 的 Windows Forms 移轉指南。

深色模式

重要

此功能集是實驗性的。

已將深色模式的初步支援新增至 Windows Forms,目標是在 .NET 10 中完成支援。 當色彩模式變更時, SystemColors 會變更 為相符。 應用程式的色彩模式可以設定為下列其中一個值:

  • SystemColorMode.Classic—(預設) 淺色模式,與舊版 Windows Forms 相同。
  • SystemColorMode.System—尊重 Windows 所設定的淺色或深色模式。
  • SystemColorMode.Dark—使用深色模式。

若要套用色彩模式,請在程式啟動程式代碼中呼叫 Application.SetColorMode(SystemColorMode)

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

此 API 在編譯程式錯誤後方受到防護,因為它是實驗性的。 若要隱藏錯誤並啟用 API 的存取權,請將下列內容 PropertyGroup 新增至您的項目檔:

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

提示

如需如何隱藏此規則的詳細資訊,請參閱 編譯程式錯誤WFO5001

FolderBrowserDialog 增強功能

FolderBrowserDialog 現在支持選取儲存在陣列中的 SelectedPaths 多個資料夾。 若要開啟多個資料夾,請將 設定 Multiselecttrue

System.Drawing 新功能和增強功能

System.Drawing 連結庫有許多改進,包括包裝 GDI+ 效果、支援 ReadOnlySpan和更好的 Interop 程式代碼產生。

System.Drawing 支援 GDI+ 效果

System.Drawing 連結庫現在支援 GDI+ 位圖效果,例如模糊和色調。 效果一直是 GDI+ 的一部分,但直到現在才透過 System.Drawing 公開效果。

效果會藉由呼叫 Bitmap 方法套用至 Bitmap.ApplyEffect(Effect, Rectangle) 。 為要套用效果的區域提供效果和選擇性 Rectangle 專案。 使用 Rectangle.Empty 來處理整個映像。

System.Drawing.Imaging.Effects命名空間包含您可以套用的效果:

System.Drawing 支援 Span

已增強許多已接受陣列的方法,也接受 ReadOnlySpan。 例如,、、 和GraphicsPath.AddLines(ReadOnlySpan<Point>)Graphics.DrawLines(Pen, ReadOnlySpan<Point>)DrawPolygon(Pen, ReadOnlySpan<Point>)方法接受陣列或 ReadOnlySpan

使用 CsWin32 進行 Interop

所有 Interop 程式代碼已由 C# P/Invoke 來源產生器 CsWin32 取代。

ToolStrip

已將下列改善新增至 ToolStripToolStripItem 控件。

  • 新增新屬性到 ToolStripAllowClickThrough

    當設定為 true時,控件可以在窗體未對焦時與其互動。

回到發行 .NET Core 3.1 時,已移除所有相關 Menu控件,例如 MainMenuMenuItemToolStrip 應該改用和 ToolStripMenuItem 。 不過, ToolStripItem的基類 ToolStripMenuItem沒有 事件的取代 MenuItem.Select 。 當滑鼠或鍵盤用來反白顯示專案時,就會引發這個事件。

.NET 9 已新增 ToolStripItem.SelectedChanged,可用來偵測功能表項反白顯示時間。