diff --git a/Apewer.Windows/Surface/FormsUtility.cs b/Apewer.Windows/Surface/FormsUtility.cs index 4a12d8c..cc89ff2 100644 --- a/Apewer.Windows/Surface/FormsUtility.cs +++ b/Apewer.Windows/Surface/FormsUtility.cs @@ -660,6 +660,49 @@ namespace Apewer.Surface if (form != null) SetTopMost(form.Handle, value); } + /// 释放系统资源。 + public static void Dispose(Control control) + { + if (control == null) return; + + if (control.InvokeRequired) + { + control.Invoke(() => Dispose(control)); + return; + } + + Dispose(control.Controls); + + if (control is Form form) + { + try + { + if (form.Visible) form.Close(); + } + catch { } + } + + RuntimeUtility.Dispose(control); + } + + /// 释放系统资源。 + public static void Dispose(Control.ControlCollection controls) + { + if (controls == null) return; + + var count = controls.Count; + if (count < 1) return; + + var children = new Control[count]; + controls.CopyTo(children, 0); + + foreach (var child in children) + { + controls.Remove(child); + Dispose(child); + } + } + #endif #endregion