What problem does it solve? WinForms codebases accumulate logic in code-behind, leak GDI handles, and deadlock on the UI thread, making maintenance and modernization of line-of-business desktop apps error-prone. This Skill enforces the conventions that keep Forms testable, leak-free, and ready to move from .NET Framework 4.8 to modern .NET. ## Core Features & Use Cases - Architecture separation: Enforces MVP passive view (or the .NET 8 MVVM binding engine for new work) so presenters unit-test against a mocked IView with no UI thread. - Runtime-specific mechanics: References cover .NET Framework 4.8 as the frozen maintenance surface and .NET 8/9/10 as the strategic target, including InvokeAsync, async forms, dark mode, and PerMonitorV2 high-DPI setup. - Leak and disposal discipline: Provides per-case rules for event-handler and GDI/USER handle leaks, plus a flat-handle-count acceptance bar before shipping. - Use Case: When modernizing a 4.8 WinForms app to .NET 10, load this Skill to convert forms to DI-resolvable MVP views, replace BackgroundWorker with async/await and IProgress<T>, and validate the migration with a handle-count stress test. ## Quick Start Load the dotnet-winforms skill before editing any Form, UserControl, code-behind, presenter, or .Designer.cs file in this WinForms project.