从另一个线程和窗体停止线程

本文关键字:线程 窗体 另一个 | 更新日期: 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% 必要,除非我调用一个全新的应用程序,否则我会使用上述方法之一来做到这一点。