0

在 C# 中为项目使用表单时,我有我的主表单 (mainForm)。这个表单,当点击button1时,它会为第二个表单(actionForm)创建一个新线程。这一个,和主要的一样,当我点击button1时,它为thid Form(registerForm)创建一个新线程。这第三个表单,当我关闭它时,它必须重新创建第二个表单。

问题是,线程继续运行。表格,已关闭。但是当我点击第三种形式的“X”时,它会循环,创建新的actionForms。

创建新线程时如何停止线程?有没有更好的方法来使用表格?

代码:

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)
    {

    }
}
}
4

2 回答 2

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;
}
于 2013-09-07T18:57:59.917 回答
0

除非您需要将每个表单都建立为一个全新的流程,否则如果您需要它们全部是异步的,我建议使用 BackgroundWorker 来显示新表单。如果您使用的是 WinForms。如果您使用的是 WPF,则需要使用 Dispatcher 来创建新表单。

这实际上取决于您的表格流程。

我个人尽量避免创建新线程,除非绝对百分百必要,并且我使用上述方法之一来做到这一点,除非我正在调用一个全新的应用程序。

于 2013-09-07T06:12:31.737 回答