我在 C# 中有一个主窗体类和一个副类。我正在创建侧类的实例并从该实例调用该类的方法。该方法启动新线程。现在我正在创建多个实例并为每个实例调用方法。因此,启动了多个线程。现在我已经在侧类中实现了一个方法,以确保在从与线程关联的方法中退出时关闭线程。我不知道用户是否突然单击主框架窗口的 X(关闭)按钮,然后如何处理该副类中的线程。
PS - 侧类的实例在主窗体类的方法中实例化。因此,在处置时,我没有随身携带这些实例,因此我可以阻止它们。
我在 C# 中有一个主窗体类和一个副类。我正在创建侧类的实例并从该实例调用该类的方法。该方法启动新线程。现在我正在创建多个实例并为每个实例调用方法。因此,启动了多个线程。现在我已经在侧类中实现了一个方法,以确保在从与线程关联的方法中退出时关闭线程。我不知道用户是否突然单击主框架窗口的 X(关闭)按钮,然后如何处理该副类中的线程。
PS - 侧类的实例在主窗体类的方法中实例化。因此,在处置时,我没有随身携带这些实例,因此我可以阻止它们。
如果通过关闭主窗口来终止应用程序,那么您可以在创建它们时在工作线程中的副类中将 IsBackground 设置为 true。如此:
var newThread = new Thread(DoWork) {IsBackground = true};
newThread.Start();
然而,如果关闭你的“主”窗口不是应用程序的结束,那么主窗口应该保留一个对实例化侧类的引用数组。然后它应该在每个侧实例上处理/设置一个标志,以指示线程应该停止(你如何做到这一点取决于你 - 在侧类中定期检查的标志可能是合适的)。此调用应发生在“主”窗口的 OnClose 中。
您可以将侧线程设置为在应用程序结束时关闭的 BackGroundWorkers。
或者在 form.Closing 事件中调用它们各自的 join() 方法。
这将使应用程序等待线程完成。