C# 如何确保关闭主窗口时所有侧线程(不同级别)都已关闭

C# 如何确保关闭主窗口时所有侧线程(不同级别)都已关闭,c#,.net,multithreading,C#,.net,Multithreading,我有一个C#的主修课和一个副修课。我正在创建side类的实例,并从该实例调用该类的方法。该方法启动新线程。现在我正在创建多个实例,并为每个实例调用方法。因此,启动了多个线程。现在,我在side类中实现了一个方法,以确保线程在从与线程关联的方法中退出时是关闭的。 我不知道用户是否突然单击主框架窗口的X(close)按钮,然后如何处理该侧类中的线程 副类的实例在主窗体类的方法中实例化。因此,在处理时,我没有实例,因此我可以停止它们。您可以将侧线程设置为BackGroundWorkers,在应用程序结

我有一个C#的主修课和一个副修课。我正在创建side类的实例,并从该实例调用该类的方法。该方法启动新线程。现在我正在创建多个实例,并为每个实例调用方法。因此,启动了多个线程。现在,我在side类中实现了一个方法,以确保线程在从与线程关联的方法中退出时是关闭的。 我不知道用户是否突然单击主框架窗口的X(close)按钮,然后如何处理该侧类中的线程


副类的实例在主窗体类的方法中实例化。因此,在处理时,我没有实例,因此我可以停止它们。

您可以将侧线程设置为BackGroundWorkers,在应用程序结束时关闭。
或以.Closing事件的形式调用各自的join()方法。

这将使应用程序等待线程完成。

如果关闭主窗口终止应用程序,则在创建辅助类时,可以在辅助线程中将IsBackground设置为true。因此:

    var newThread = new Thread(DoWork) {IsBackground = true};
    newThread.Start();

但是,如果关闭“主”窗口不是应用程序的结束,那么主窗口应该保留对实例化的边类的引用数组。然后,它应该在每个side实例上释放/设置一个标志,以表示线程应该停止(如何停止由您决定-side类中定期检查的标志可能是合适的)。此调用应该在“Main”窗口的OnClose中进行。

我没有实现BackGroundWorkers。我只使用简单的线程。我不能调用它们的join()方法。因为线程在另一个侧类中。类的对象在方法中实例化。因此,无法从窗体关闭事件访问对象。还有其他方法吗?如果你可以发布一些代码,这样就可以更准确地回答;)很抱歉,无法对其进行总结。您最后可以尝试的是在side类中创建一个公共void jointhreads(){thread.join();thread2.join();etc}并在mainform.closing事件中调用它。没有代码,恐怕我不能说得更具体。很好,luckI我试图在点击交叉(x)按钮时终止应用程序,同时我想停止在另一个类的方法上运行的线程。正如您所说的,我认为只有在主窗体类
dispose
ing时启用一个标志,并持续检查side类中是否更改了标志,才能做到这一点。如果更改了,那么停止该线程。在这种情况下,正如我所建议的,当您在side类中创建线程时,是否可以将IsBackground标志设置为true?当前台线程完成时,运行库将为您终止这些线程。好的。做了,做了。非常感谢。因此,该属性告诉操作系统在主线程结束后立即终止线程。因为它们是背景线程。对吗?是的,对。请看这里: