C# Can';如果从类运行表单,则不会结束表单项目的执行

C# Can';如果从类运行表单,则不会结束表单项目的执行,c#,forms,exit,C#,Forms,Exit,我正在开发一个应用程序,它需要一个初始设置阶段(只运行一次),然后执行实际的程序。我通过在主文件(Program.cs)中实例化一个类来实现这一点。此类检查用户是否已经进行了设置,并在此基础上执行特定表单。问题是,一旦“FormGridScheduler”表单用classic X按钮关闭,程序不会终止其执行,但它仍在后台运行。在表单中,我创建了线程,但在“form_Closing”事件期间,我将中止所有线程,因此执行过程中应该没有剩余的线程。有人知道如何解决这个问题吗 这是“Program.cs

我正在开发一个应用程序,它需要一个初始设置阶段(只运行一次),然后执行实际的程序。我通过在主文件(Program.cs)中实例化一个类来实现这一点。此类检查用户是否已经进行了设置,并在此基础上执行特定表单。问题是,一旦“FormGridScheduler”表单用classic X按钮关闭,程序不会终止其执行,但它仍在后台运行。在表单中,我创建了线程,但在“form_Closing”事件期间,我将中止所有线程,因此执行过程中应该没有剩余的线程。有人知道如何解决这个问题吗

这是“Program.cs”文件,我从中初始化“FormManager”类,然后从中执行表单

static class Program {
    [STAThread]
    static void Main() {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        //I start the form manager
        FormManager formManager = new FormManager();
    }
}
这是FormManager类

class FormManager {
    public FormManager() {
        //I check if the user has already set up the program or not
        if (!Settings.Default.SetupDone) {
            //If you haven't done the setup yet, I start the corresponding forms
            Application.Run(new FormSetup());

            //I check if the user has closed the setup screen before completing it
            if (Settings.Default.SetupDone) {
                //I execute the main form   
                Application.Run(new FormGridScheduler());

            }
        } else {
            //I execute the main form
            Application.Run(new FormGridScheduler());

        }
    }
}

谢谢你的关注和耐心。欢迎任何建议

你可能会得到一个例外,在形式上没有接近尾声。您应该在表单中使用try/catch和finally来确保表单始终关闭。不,通过调试,我看到表单关闭时没有异常。调试过程一直持续到类“FormManager”的末尾,然后返回到“Program.cs”main,在创建新的“FormManager”实例后停止。请参见以下内容:我发现了问题。当我停止线程时,其中的UDP侦听器将继续侦听,即使线程已关闭,因此程序永远不会结束。我必须在FormClosing事件发生时直接终止侦听器。无论如何,非常感谢您的帮助和帮助!