从另一个线程和窗体停止线程
本文关键字:线程 窗体 另一个 | 更新日期: 2023-09-27 18:30:26
在C#中使用表单进行项目时,我有我的主表单(mainForm)。单击按钮 1 时,此窗体将为第二个窗体 (actionForm) 创建一个新线程。这个,与main相同,当我单击按钮1时,它为thid Form(注册表单)创建一个新线程。第三个窗体,当我关闭它时,它必须重新创建第二个窗体。
问题是,线程继续运行。表格,被关闭了。但是当我单击第三个表单中的"X"时,它会循环,创建新的动作表单。
创建新线程时如何停止线程?有没有更好的方法来使用表单?
法典:
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)
{
}
}
}
我建议你改用这个,你根本不需要多线程:
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;
}
除非您需要将每个表单都建立为一个全新的进程,否则如果您需要新表单都是异步的,我建议您使用 BackgroundWorker 来显示新表单。如果您使用的是WinForms。如果使用 WPF,则需要使用调度程序创建新窗体。
这实际上取决于您的表单流程。
我个人尽量避免创建新线程,除非绝对 100% 必要,除非我调用一个全新的应用程序,否则我会使用上述方法之一来做到这一点。