SkylineSoft

莽莽苍节兮 群山巍峨 日月光照兮 纷纭错落 丝竹共振兮 执节者歌 行云流水兮 用心无多 求大道以弹兵兮凌万物而超脱 觅知音因难得兮唯天地与作合
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

Posted on 2010-05-31 09:41  Jiangwzh  阅读(251)  评论(0)    收藏  举报

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