如何在WPF c#中关闭线程上的窗口后终止线程?
我是多线程新手。我正在使用wpf做一个项目 我的项目简介:如何在WPF c#中关闭线程上的窗口后终止线程?,c#,wpf,multithreading,C#,Wpf,Multithreading,我是多线程新手。我正在使用wpf做一个项目 我的项目简介: 一个主窗口 mainwindow中的一个方法创建另一个线程,该线程创建另一个窗口,称为窗口2 每当窗口2可见时,mainwindow就会挂起(因此我使用join()方法挂起主线程) 问题是每当我关闭窗口2时,新线程都不会终止。因此,主线程将永远挂起。那么如何解决这个问题呢 以下代码是我在MainWindow类中为窗口2创建新线程的代码: private void Button_Click_1(object sender, RoutedE
join()
方法挂起主线程)private void Button_Click_1(object sender, RoutedEventArgs e)
{
Thread addThread = new Thread(CreateCourseWindow);
addThread.SetApartmentState(ApartmentState.STA);
addThread.Start();
Thread.Sleep(TimeSpan.FromSeconds(1));
addThread.Join();
if (addcourse.Saved) CreateCourseButton(myCourses.Count(), myCourses.Last());
}
以下代码是新线程的输入函数
private void CreateCourseWindow()
{
addcourse = new AddCourse();
addcourse.Activate();
addcourse.Show();
addcourse.Topmost = true;
System.Windows.Threading.Dispatcher.Run();
}
下面的代码是我想要终止线程的地方
private void Button_Click_2(object sender, RoutedEventArgs e)
{
this.Close();
}
AddCourse是Window2类。首先,不要创建多个UI线程。它造成了一个很难处理的混乱局面。只有在应用程序中才有UI线程,除非您确定需要更多,并且确实知道自己在做什么 对于这种特定情况,您不需要担心异步、多线程或其中任何一种:
ChildWindow child = new ChildWindow();
this.Hide();
child.ShowDialog();
this.Show();
通过使用ShowDialog
而不是Show
可以消除所有讨厌的异步问题
如果希望父窗口可见但未启用,可以删除显示/隐藏,但保留ShowDialog
,这将确保禁用父窗口
能给我们更多的信息吗?为什么要以这种方式使用线程?这是为了实现什么?因为每当我在前面有窗口2时,我想挂起主窗口(意味着用户无法与之交互)。我明白了,这很好,但正如您接受的答案所述,您不需要线程或类似的东西,您可以随时将窗口的
ishitestvisible
更改为False,这样用户就不能在其上单击任何内容。谢谢您的回答。如果我想同时显示主窗口和窗口2,并在窗口2处于活动状态时暂停主窗口,我该怎么办?@user1998777您应该按照我在上一句中提到的做,删除显示/隐藏调用。我不仅想禁用父窗口,我还希望父窗口等待来自子窗口的数据并执行一些操作。