Optimisation du contrôle .NET Control Repainting avec WM_SetdreDraw
.NET Les développeurs doivent souvent interrompre temporairement la repeinture dans un contrôle et ses enfants lors de nombreuses mises à jour. Alors que SuspendLayout
et ResumeLayout
gèrent la disposition, ils ne suppriment pas complètement le redémarrage.
La solution WM_SetdreDraw
Le message WM_SETREDRAW
, envoyé à la poignée de la fenêtre du contrôle, fournit une solution robuste. Un paramètre booléen des contrôles redessiant: false
désactive, et true
le permet.
Implémentation de méthodes de suspension et de reprise des méthodes
Cette classe rationalisée résume la fonctionnalité:
<code class="language-csharp">public static class ControlPainting { [DllImport("user32.dll")] public static extern int SendMessage(IntPtr hWnd, int wMsg, bool wParam, int lParam); private const int WM_SETREDRAW = 11; public static void SuspendPainting(Control parent) { SendMessage(parent.Handle, WM_SETREDRAW, false, 0); } public static void ResumePainting(Control parent) { SendMessage(parent.Handle, WM_SETREDRAW, true, 0); parent.Refresh(); } }</code>
Exemple d'utilisation
pour éviter la repection:
<code class="language-csharp">ControlPainting.SuspendPainting(myControl); // ... perform modifications ... ControlPainting.ResumePainting(myControl);</code>
lecture complémentaire
Pour plus d'informations approfondies, consultez ces ressources:
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!