需求如下:应用程序有三种窗体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);
}
}