在项目中使用C#中的表单时,我有我的主表单(mainForm)。这个表单,当单击button1时,它为第二个Form(actionForm)创建一个新线程。这个,与main相同,当我点击button1时,它为thid Form(registerForm)创建一个新线程。第三个表格,当我关闭它时,它必须重新创建第二个表格。
问题是,线程继续运行。表格已经关闭。但是当我点击第三种形式的“X”时,它会循环,创建新的actionsForms。
如何在创建新线程时停止线程? 有没有更好的方法来使用表单?
代码:
namespace Lector
{
public partial class register : Form
{
public register()
{
InitializeComponent();
}
//New thread for Form2
public static void ThreadProc()
{
//New Form
Application.Run(new Form2());
}
//Close Form
private void Registro_FormClosing(Object sender, FormClosingEventArgs e)
{
regresoForma();
}
private void regresoForma()
{
//New thread
System.Threading.Thread nuevoRegistro2 = new System.Threading.Thread(new System.Threading.ThreadStart(ThreadProc));
//Start thread
nuevoRegistro2.Start();
//Close this form
this.Close();
}
private void button1_Click(object sender, EventArgs e)
{
}
}
}
答案 0 :(得分:1)
我建议您使用它,而根本不需要多线程:
private void regresoForma()
{
//Hide this form
this.Visible=false;
//Start Form2 but as a dialog
//i.e. this thread will be blocked til Form2 instance closed
(new Form2()).ShowDialog();
//Reshow this form
this.Visible=true;
}
答案 1 :(得分:0)
除非你需要让每个表单都将自己建立为一个全新的进程,否则我建议使用BackgroundWorker来显示新表单,如果你需要它们都是异步的。如果您使用的是WinForms。如果您使用的是WPF,则需要使用Dispatcher来创建新表单。
这实际上取决于表单的流程。
我个人尽量避免创建新线程,除非它绝对是百分之百必需的,并且我使用上述方法之一来做到这一点,除非我打电话给一个全新的应用程序。