Есть ли в Windows Forms такое событие «LoadComplete»? - PullRequest
0 голосов
/ 18 августа 2011

Я хочу, чтобы моя форма Windows загружалась первой, отображала ее дочерние элементы и все. После этого загрузите в него тяжелые данные. Вот почему я ищу любое событие, которое я мог бы использовать сразу после завершения загрузки формы.

Есть мысли по этому поводу?

Ответы [ 4 ]

3 голосов
/ 18 августа 2011

Я никогда не находил лучшего решения, чем Активированный;хотя это поднимается каждый раз, когда форма получает фокус - поэтому вам нужно отфильтровать все время после первого:

bool _firstActivation = true;
void Form1_Activated(object sender, EventArgs e)
{
    if (_firstActivation)
    {
        _firstActivation = false;
        OnFirstActivation();
    }
}

private void OnFirstActivation()
{

}
2 голосов
/ 18 августа 2011

Возможно, вы ищете событие Form.Shown .Если вы выполняете большую интенсивную работу, возможно, вам все равно следует использовать фоновый поток, чтобы избежать блокировки пользовательского интерфейса.

1 голос
/ 04 мая 2014

Как MikeP сказал, что вы хотите обработать событие Form.Shown только один раз. Так что просто присоедините к четному и отсоедините, когда закончите.

    private void frmMain_Load(object sender, System.EventArgs e)
    {
        // Do stuff in form load.

        Shown += FirstShown;
    }

    private void FirstShown(object sender, EventArgs eventArgs)
    {
        Refresh();

        // Do something here

        // Detach from this event.
        Shown -= FirstShown;
    }
0 голосов
/ 18 августа 2011

Я делаю это так, что запускаю таймер длительностью 1 и уничтожаю его в событии, и с помощью этого метода я знаю, что цикл сообщений будет пустым, и инициализация формы будет завершена, когда произойдет мое событие.

Событие устанавливается с помощью метода Form_OnLoad().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...