现在的位置: 首页 > 综合 > 正文

主窗口与工作窗口互不阻塞

2018年01月09日 ⁄ 综合 ⁄ 共 1210字 ⁄ 字号 评论关闭
需求如下:应用程序有三种窗体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);
        }
    }

抱歉!评论已关闭.