关闭窗口窗体

本文关键字:窗体 窗口 | 更新日期: 2023-09-27 18:16:20

我正在c#窗口窗体上工作,在我的应用程序中,我试图在页面加载事件中使用c#窗口窗体执行过程。我正在尝试,而执行过程的形式应该显示后,该形式应该自动关闭。我的代码是这样的

 public partial class Form1 : Form
{
    string servername = "";
    string database = ""; string password = ""; string Filepath = ""; string uid = "";
    string reslt = "";
    public Form1()
    {
        InitializeComponent();
        GetExelData();
    }
  private void Form1_Load(object sender, EventArgs e)
    {
        this.Close();
    }
 }

但是我的代码窗口窗体不显示,当方法执行时它被关闭。

关闭窗口窗体

试试这个:-

               private BackgroundWorker bw;
                private void Form1_Load(object sender, EventArgs e)
                {
                  bw = new BackgroundWorker();
                 bw.WorkerReportsProgress = true;
                 bw.DoWork += BwOnDoWork;
                 bw.WorkerSupportsCancellation = true;
                 bw.RunWorkerAsync();
                }
               private void BwOnDoWork(object sender, DoWorkEventArgs e)
               {
                 GetExelData();
                 bw.CancelAsync();
                 if (this.InvokeRequired)
                        {
                            this.Invoke(new EventHandler(delegate { this.Close(); }));
                        }
               }

将GetExcelData()移动到Form1_Load处理程序。(Shown处理程序可能更好)

这个方法将在显示表单时被调用。

在方法完成后关闭窗体:

  • 使用事件或回调(如果可用)
  • 或在单独的线程上调用GetExcelData并在线程完成时关闭窗体

您可以尝试将GetExcelData调用移动到load事件:

public Form1()
{
    InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
    GetExelData();
    this.Close();
}

表单加载仅在表单完全构建时发生。然而,请注意,即使有了我的改进,你想做的事情也没有意义。

关闭时的"延迟"只是因为该方法是在GUI线程上执行的(坏习惯)。您是否试图显示某种加载指示器?有更好的方法。

使用Shown事件处理程序
此事件将在表单第一次显示后执行(这正是您所需要的)。

public Form1()
{
    InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
    GetExelData();
}
private void Form1_Shown(object sender, EventArgs e)
{
    this.Close();
}