Apa yang baru dalam Formulir Windows untuk .NET 9
Artikel ini menjelaskan apa yang baru dalam Formulir Windows untuk .NET 9.
Formulir asinkron
Penting
Set fitur ini bersifat eksperimental, kecuali untuk Control.InvokeAsync
.
Aplikasi modern memerlukan model komunikasi asinkron. Karena Formulir Windows telah berkembang di .NET, lebih banyak komponen memerlukan marshaling ke async
metode untuk berjalan pada UI-thread. Misalnya, kontrol seperti WebView2, API Windows 10 dan Windows 11 asli, atau pustaka asinkron modern seperti Semantic Kernel. Skenario lain adalah tempat Anda berbagi MVVM ViewModels yang dibangun dengan async
Formulir Windows dari tumpukan UI lain seperti WPF, WinUI, atau .NET MAUI.
Berikut ini daftar metode baru yang ditambahkan untuk mendukung skenario asinkron:
- System.Windows.Forms.Form.ShowAsync
- Form.ShowDialogAsync
- TaskDialog.ShowDialogAsync
- Control.InvokeAsync (API ini tidak bersifat eksperimental.)
API ini dijaga di balik kesalahan kompilator karena bersifat eksperimental. Untuk menekan kesalahan dan mengaktifkan akses ke API, tambahkan yang berikut ini PropertyGroup
ke file proyek Anda:
<PropertyGroup>
<NoWarn>$(NoWarn);WFO5002</NoWarn>
</PropertyGroup>
Tip
Untuk informasi selengkapnya tentang cara menyembunyikan aturan ini, lihat WFO5002 Kesalahan Pengompilasi.
BinaryFormatter tidak lagi didukung
BinaryFormatter
dianggap tidak aman karena rentan terhadap serangan deserialisasi, yang dapat menyebabkan penolakan layanan (DoS), pengungkapan informasi, atau eksekusi kode jarak jauh. Ini diterapkan sebelum kerentanan deserialisasi dipahami dengan baik, dan desainnya tidak mengikuti praktik terbaik keamanan modern.
Dimulai dengan .NET 9, implementasinya telah dihapus untuk mencegah risiko keamanan ini. Ketika BinaryFormatter
digunakan, PlatformNotSupportedException
pengecualian dilemparkan.
Formulir Windows digunakan BinaryFormatter
dalam banyak skenario, seperti saat menserialisasikan data untuk operasi clipboard dan seret dan letakkan, dan yang paling penting, Formulir Windows Designer. Secara internal, Formulir Windows terus menggunakan subset BinaryFormatter
yang lebih aman untuk menangani kasus penggunaan tertentu dengan sekumpulan jenis yang diketahui.
Formulir Windows untuk .NET 9 dikirim dengan penganalisis yang membantu Anda mengidentifikasi waktu Anda secara tidak sadar berpartisipasi dalam serialisasi biner.
Untuk informasi selengkapnya tentang BinaryFormatter
, lihat panduan migrasi Formulir Windows untuk BinaryFormatter.
Mode gelap
Penting
Set fitur ini bersifat eksperimental.
Dukungan awal untuk mode gelap telah ditambahkan ke Formulir Windows, dengan tujuan menyelesaikan dukungan di .NET 10. Saat mode warna berubah, SystemColors diubah agar cocok. Mode warna untuk aplikasi dapat diatur ke salah satu nilai berikut:
-
SystemColorMode.Classic
—(default) Mode cahaya, sama dengan versi Formulir Windows sebelumnya. -
SystemColorMode.System
—Hormati mode terang atau gelap yang diatur oleh Windows. -
SystemColorMode.Dark
—Gunakan mode gelap.
Untuk menerapkan mode warna, panggil Application.SetColorMode(SystemColorMode) kode startup program:
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 ini dijaga di balik kesalahan kompilator karena bersifat eksperimental. Untuk menekan kesalahan dan mengaktifkan akses ke API, tambahkan yang berikut ini PropertyGroup
ke file proyek Anda:
<PropertyGroup>
<NoWarn>$(NoWarn);WFO5001</NoWarn>
</PropertyGroup>
Tip
Untuk informasi selengkapnya tentang cara menyembunyikan aturan ini, lihat WFO5001 Kesalahan Pengompilasi.
Peningkatan FolderBrowserDialog
FolderBrowserDialog
sekarang mendukung pemilihan beberapa folder, yang disimpan dalam SelectedPaths array. Untuk mengaktifkan beberapa folder, atur Multiselect ke true
.
System.Drawing fitur dan penyempurnaan baru
Pustaka System.Drawing telah memiliki banyak peningkatan, termasuk membungkus efek GDI+, dukungan untuk ReadOnlySpan
, dan pembuatan kode interop yang lebih baik.
System.Drawing mendukung efek GDI+
Pustaka System.Drawing sekarang mendukung efek bitmap GDI+, seperti blur dan tint. Efek telah menjadi bagian dari GDI+, tetapi tidak diekspos melalui System.Drawing sampai sekarang.
Efek diterapkan ke dengan Bitmap memanggil Bitmap.ApplyEffect(Effect, Rectangle) metode . Berikan efek dan opsional Rectangle
bagi area untuk menerapkan efeknya. Gunakan Rectangle.Empty untuk memproses seluruh gambar.
Namespace System.Drawing.Imaging.Effects berisi efek yang dapat Anda terapkan:
- BlackSaturationCurveEffect
- BlurEffect
- BrightnessContrastEffect
- ColorBalanceEffect
- ColorCurveEffect
- ColorLookupTableEffect
- ColorMatrixEffect
- ContrastCurveEffect
- CurveChannel
- DensityCurveEffect
- ExposureCurveEffect
- GrayScaleEffect
- HighlightCurveEffect
- InvertEffect
- LevelsEffect
- MidtoneCurveEffect
- ShadowCurveEffect
- SharpenEffect
- TintEffect
- VividEffect
- WhiteSaturationCurveEffect
System.Drawing mendukung Rentang
Banyak metode yang menerima array telah ditingkatkan untuk juga menerima ReadOnlySpan
. Misalnya, metode seperti GraphicsPath.AddLines(ReadOnlySpan<Point>), , Graphics.DrawLines(Pen, ReadOnlySpan<Point>)dan DrawPolygon(Pen, ReadOnlySpan<Point>), menerima array atau ReadOnlySpan
.
Menggunakan CsWin32 untuk interop
Semua kode interop telah digantikan oleh CsWin32, generator sumber C# P/Invoke.
ToolStrip
Penyempurnaan berikut telah ditambahkan ke ToolStrip kontrol dan ToolStripItem .
Properti baru ditambahkan ke
ToolStrip
, AllowClickThrough.Ketika diatur ke
true
, kontrol dapat berinteraksi saat formulir tidak fokus.
Kembali ketika .NET Core 3.1 dirilis, semua Menu
kontrol terkait, seperti MainMenu
dan MenuItem
, dihapus.
ToolStrip
dan ToolStripMenuItem
harus digunakan sebagai gantinya. Namun, ToolStripItem
, kelas dasar untuk ToolStripMenuItem
, tidak memiliki penggantian untuk peristiwa tersebut MenuItem.Select
. Kejadian ini dinaikkan ketika tetikus atau papan tombol digunakan untuk menyoroti item.
.NET 9 telah menambahkan ToolStripItem.SelectedChanged, yang dapat digunakan untuk mendeteksi kapan item menu disorot.
.NET Desktop feedback