需求如下:应用程序有三种窗体mainform(主窗体一个),workerform(工作窗体多个),模式dialog.workerform会打开模式dialog。希望dialog只阻塞打开它的workerform,不阻塞mainform与其他的workerform.当MainForm关闭时,所有workerform也关闭。
实现:
需求如下:应用程序有三种窗体mainform(主窗体一个),workerform(工作窗体多个),模式dialog.workerform会打开模式dialog。希望dialog只阻塞打开它的workerform,不阻塞mainform与其他的workerform.当MainForm关闭时,所有workerform也关闭。 实现: public partial class WorkerForm : Form { private MainForm mainForm; public WorkerForm() { InitializeComponent(); } public WorkerForm(MainForm form):this() { mainForm = form; mainForm.FormClosing += new FormClosingEventHandler(mainForm_FormClosing); } void mainForm_FormClosing(object sender, FormClosingEventArgs e) { if (this.IsHandleCreated) { this.Invoke(new Action(delegate { this.Close(); })); } } private void WorkerForm_FormClosed(object sender, FormClosedEventArgs e) { mainForm.FormClosing -= new FormClosingEventHandler(mainForm_FormClosing); } private void button1_Click(object sender, EventArgs e) { new Form().ShowDialog(); } } public partial class MainForm : Form { public MainForm() { InitializeComponent(); } public void OpenWorkerForm(object form) { WorkerForm f = new WorkerForm(form as MainForm); Application.Run( f); } private void button1_Click(object sender, EventArgs e) { var thread = new Thread(new ParameterizedThreadStart(OpenWorkerForm)); thread.Start(this); } }