当父窗体关闭时,如何关闭在自己的线程中运行的子窗体? (非MDI)

时间:2016-09-29 12:39:41

标签: c# multithreading winforms parent-child

我有一个应用程序,其中使用单个子表单定义从父表单生成多个子表单(即frmParent生成frmChild的多个实例)。

每个孩子都有自己的主题 - 我希望能够独立地与每个孩子互动(我不喜欢MDI)。

那么 - 如果父表单已关闭,我该如何指示子表单自行关闭?

        private void btn1_Click(object sender, EventArgs e)
    {
        Thread thread = new Thread(delegate ()
        {
            using (Child child = new Child())
            {
                child.MyName = "1";
                child.ShowDialog();
            }
        });
        thread.SetApartmentState(ApartmentState.STA);
        thread.Start();
    }

    private void btn2_Click(object sender, EventArgs e)
    {
        Thread thread = new Thread(delegate ()
        {
            using (Child child = new Child())
            {
                child.MyName = "2";
                child.ShowDialog();
            }
        });
        thread.SetApartmentState(ApartmentState.STA);
        thread.Start();
    }

1 个答案:

答案 0 :(得分:2)

作为基于注释的结论,所有UI组件应该只在一个线程上运行:主(UI)线程。这是规则。您不需要/不应该使用其他线程。因此,如果不在click事件处理程序中使用另一个线程,只需编写:new Child()。Show();