1,泛型+窗体创建检查(无则创建)
private void ChildWinShow<T>() where T : Form, new()
{
foreach (var FormItem in Application.OpenForms)
{
var vForm = FormItem as T;
if (vForm != null)
{
vForm.Activate();
return;
}
}
T win = new T();
win.MdiParent = this;
win.ControlBox = false;
win.Dock = DockStyle.Fill;
win.Show();
}
2,Timer+委托+事件,不使用invoke来更新UI
例子:父子窗体
父窗体Timer调用子窗体的UI更新事件(注:将子窗体的UI更新事件在子窗体中封装成函数,因为类中事件只能在类中调用)