【发布时间】:2016-09-29 12:39:41
【问题描述】:
我有一个应用程序,其中使用单个子表单定义从父表单生成多个子表单(即 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();
}
【问题讨论】:
-
所有 UI 组件都应该只在一个线程上运行:主 (UI) 线程。这是规则。
-
您确定他们在自己的线程中吗?通常只有一个 UI 线程。你是怎么给他们看的?
-
只需使用
child.Show()。你不需要/不应该使用另一个线程。 -
在上面的点击事件处理程序中不使用另一个线程,只需写:
new Child().Show(); -
最好还是编辑一下答案,然后根据 cmets 下结论,比如 作为基于 cmets 的结论,所有 UI 组件都应该只运行在一个线程上:主(UI)线程.这就是规则。您不需要/不应该使用另一个线程。因此,无需在单击事件处理程序中使用其他线程,只需编写:
new Child().Show();。这是一个更完整和有用的答案。你会得到我的投票。
标签: c# multithreading winforms parent-child