C# 关闭窗口窗体?

C# 关闭窗口窗体?,c#,.net,winforms,C#,.net,Winforms,我正在处理C#窗口窗体,在我的应用程序中,我试图在页面加载事件中使用C#窗口窗体执行过程。我正在尝试,在执行该过程时,窗体应该显示,然后窗体应该自动关闭。我的代码是这样的 public partial class Form1 : Form { string servername = ""; string database = ""; string password = ""; string Filepath = ""; string uid = ""; string

我正在处理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();
    }

 }

但是,如果我的代码窗口窗体不显示,则在执行方法时它将关闭。您能帮助我吗。

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

public Form1()
{
    InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
    GetExelData();
    this.Close();
}
表单加载仅在表单完全构建时发生。但是请注意,即使我有所改进,你到底想做什么也没有意义

关闭时的这种“延迟”只是因为该方法是在GUI线程上执行的(错误的做法)。你想显示某种装载指示器吗?有更好的方法。

将GetExcelData()移动到Form1\u加载处理程序。(显示的
处理程序可能更好)

这样,在显示表单时将调用该方法

要在方法完成后关闭表单,请执行以下操作:

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

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

试试这个:-

               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(); }));
                        }
               }

在您的情况下,加载表单后立即关闭表单,根本看不到表单。问题是-何时要自动关闭它?在page_load事件中运行Backgroundworker。在backgroundworker的末尾,关闭表单。不要将此.Close()放在页面加载中event@evilone,在执行这些过程之后,我的意思是我有一个方法GetExelData(),在此之后表单会自动关闭。谢谢你的回复。是的,它工作得很好,这就是我想要的。
               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(); }));
                        }
               }