Wait until form is finished loading

余生长醉 提交于 2021-02-18 12:00:08

问题


Is there some sort of boolean that I can use to check whether the instance of a form is loaded, or otherwise wait until the form is loaded?

for example:

While(form_loaded == false) {
  Try {
    //do something
  }
  catch {
  }//do try catch so code won't barf
}

I keep getting the following exception:

A first chance exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll

An unhandled exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll

Additional information: Invoke or BeginInvoke cannot be called on a control until the window handle has been created.

This is what I am worrying about.

Additionally if a more detailed explanation is needed I can try to post some code and/or some more output debugging information.


回答1:


try to use the shown event something like this

 public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.Shown += new System.EventHandler(this.Form1_Shown);
    }

    private void Form1_Shown(object sender, EventArgs e)
    {

    }
}

hope this help




回答2:


The first event that is triggered after form is fully loaded is the Shown event. use it...


According to MSDN the event sequence is :

When application starts:

  • Control.HandleCreated
  • Control.BindingContextChanged
  • Form.Load
  • Control.VisibleChanged
  • Form.Activated
  • Form.Shown

When an application closes:

  • Form.Closing
  • Form.FormClosing
  • Form.Closed
  • Form.FormClosed
  • Form.Deactivate

And as @Henk Holterman stated in his answer, don't use busy waiting in an event driven form...




回答3:


You have a Loaded and a Shown event to pick from.

Windows is event driven so never wait for something in a loop.



来源:https://stackoverflow.com/questions/18675771/wait-until-form-is-finished-loading

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!