C# 在显示一些说明后,如何打开和关闭启动窗体?

C# 在显示一些说明后,如何打开和关闭启动窗体?,c#,forms,C#,Forms,我有一个表单(f1),在打开另一个表单(f2)之前需要运行一些指令,并且当它结束时必须关闭。我在program.csApplication.Run(new f1())中设置在f1指令的末尾,我写了 f2 f = new f2(); f.ShowDialog(); this.Close(); 但它不会关闭,只是进入后台。所有操作都应该按照您的方式进行,但隐藏f1并以这种方式显示f2: this.Hide(); var frm2 = new f2(); frm2.Closed += (sender

我有一个表单(
f1
),在打开另一个表单(
f2
)之前需要运行一些指令,并且当它结束时必须关闭。我在
program.cs
Application.Run(new f1())中设置在f1指令的末尾,我写了

f2 f = new f2();
f.ShowDialog();
this.Close();

但它不会关闭,只是进入后台。

所有操作都应该按照您的方式进行,但隐藏f1并以这种方式显示f2:

this.Hide();
var frm2 = new f2();
frm2.Closed += (sender, args) => this.Close();
frm2.Show();
要给出更详细的答案:

public class Form1() : Form
{
    public Form1() {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e) {
        var worker = new BackgroundWorker();
        worker.DoWork += worker_DoWork;
        worker.RunWorkerCompleted += worker_RunWorkerCompleted;
        worker.RunWorkerAsync();
    }

    private void worker_DoWork(object sender, DoWorkEventArgs e) {
        Thread.Sleep(5000);
        // this is where you can load your data from file
    }

    private void worker_RunWorkerCompleted(
        object sender, RunWorkerCompletedEventArgs e) 
    {
        this.Hide();
        var frm2 = new Form2();
        frm2.Closed += (s, a) => this.Close();
        frm2.Show();
    }
}

因此
Form1
将开始使用后台工作程序加载数据。加载数据时,
BackgroundWorker
将触发
RunWorkerCompleted
事件。该事件处理程序将隐藏
Form1
而不是关闭它,创建
Form2
,为Form2的
Closed
事件添加一个处理程序,以便关闭
Form2
将停止您的应用程序,然后显示
Form2

听起来好像您误用了表单。为什么不在执行
应用程序之前将该代码移到一个类中并调用该类。运行(new f2())
并跳过第一个无意义的表单?您的意思是像启动屏幕一样吗?就像Outlook在加载时打开,然后让用户在加载应用程序之前单击“确定”?是@DominicZukiewicz。。我想获得类似的东西或visual studio开始form@Smith.h.Neil'因为在第一个表单中,我将数据从文件加载到dgv,并且我制作了一个带有隐藏所有加载进度的开始表单process@user3547175听起来好像你在用第一个表单作为代码的占位符,这不是正确使用表单的方式。不过我看你是要玩喷溅屏。您想要的是在加载数据时显示
f1
(splashscreen),数据加载完成后,您想要关闭
f1
并显示
f2