C# 由于关闭窗体的函数而导致线程中止
我正在使用以下功能关闭现有表单并打开新表单。 我有一个作为线程运行的函数,它总是在后台运行。 当我从线程中的函数调用下面的函数时,线程没有执行它的任务 在那之后工作。可能是线程正在中止。如何解决这个问题。谢谢C# 由于关闭窗体的函数而导致线程中止,c#,multithreading,C#,Multithreading,我正在使用以下功能关闭现有表单并打开新表单。 我有一个作为线程运行的函数,它总是在后台运行。 当我从线程中的函数调用下面的函数时,线程没有执行它的任务 在那之后工作。可能是线程正在中止。如何解决这个问题。谢谢 static public void NewMainForm(Form main, bool ClosePreviousMain) { if (main != null) { Global.ActiveForm = main.Text; if (Close
static public void NewMainForm(Form main, bool ClosePreviousMain)
{
if (main != null)
{
Global.ActiveForm = main.Text;
if (ClosePreviousMain & MyContext.curMain != null)
{
MyContext.curMain.FormClosed -= new FormClosedEventHandler(main_FormClosed);
if (Application.OpenForms.Count > 0)
{
MyContext.curMain.Invoke(new Action(MyContext.curMain.Dispose));
}
}
MyContext.curMain = main;
MyContext.curMain.FormClosed += new FormClosedEventHandler(main_FormClosed);
MyContext.curMain.ShowDialog();
}
}
运行应用程序时,运行时将创建一个主(前台)线程,并开始执行应用程序的入口点,即main方法 在GUI应用程序中,当main方法执行时,它会启动一个名为EDT(事件调度线程)的线程,另一个主(前台)线程和您的主线程在此之后退出(如果它与此无关)。但是,应用程序会一直运行,直到单个主(前台)线程处于活动状态 当GUI退出(关闭表单后)时,您正在执行的方法是后台线程(如您所述),所有主(前台)线程都将终止,因此应用程序也将随之终止。您需要做的是将后台工作线程作为前台线程运行,以便前台线程创建的所有线程默认为前台线程,后台线程创建的线程默认为后台线程
因此,要么加入主线程,等待后台线程终止(在这种情况下,您需要实现一种停止后台线程的方法)。或者将您的后台线程作为前台线程运行。也许它不会中止。你应该试着找出答案。如果你发布你的线程函数代码以及线程创建和启动代码,这会容易得多。对于线程来说,代码非常大,不能在这里发布。顺便说一下,你可以将thread.IsBackground属性设置为[真或假]使其成为背景线程。在开始线程之前,设置thread.IsBackground=false;然后检查。