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ářů:
- System.Windows.Forms.Form.ShowAsync
- Form.ShowDialogAsync
- TaskDialog.ShowDialogAsync
- Control.InvokeAsync (toto rozhraní API není experimentální.)
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 BinaryFormatter
ná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 ReadOnlySpan
a 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:
- BlackSaturationCurveEffect
- BlurEffect
- BrightnessContrastEffect
- ColorBalanceEffect
- ColorCurveEffect
- ColorLookupTableEffect
- ColorMatrixEffect
- ContrastCurveEffect
- CurveChannel
- DensityCurveEffect
- ExposureCurveEffect
- GrayScaleEffect
- HighlightCurveEffect
- InvertEffect
- LevelsEffect
- MidtoneCurveEffect
- ShadowCurveEffect
- SharpenEffect
- TintEffect
- VividEffect
- WhiteSaturationCurveEffect
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 Menu
ovládací prvky související s těmito funkcemi, například MainMenu
a MenuItem
.
ToolStrip
a ToolStripMenuItem
měla by být použita.
ToolStripItem
Základní třída pro ToolStripMenuItem
vš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á.
.NET Desktop feedback