Каков наилучший способ вызвать метод правильно после загрузки формы? - PullRequest
6 голосов
/ 02 июня 2010

У меня есть приложение на C # Windows. То, как я сейчас его настроил, когда Form1_Load () запускает, он проверяет восстановленные несохраненные данные и, если он находит какие-то, он запрашивает пользователя, хотят ли они открыть эти данные. Когда программа запускается, она работает нормально, но окно сообщения отображается сразу, а основная форма программы (Form1) не отображается, пока пользователь не нажмет «да» или «нет». Я хотел бы, чтобы сначала появилась Form1, а затем окно с сообщением.

Теперь, чтобы обойти эту проблему, прежде чем я создал таймер в своей форме, запустил таймер в методе Form1_Load (), а затем выполнил проверку и приглашение пользователя в первом событии Timer Tick. Этот метод решает проблему, но кажется, что может быть лучший путь.

У вас, ребята, есть идеи получше?

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

Ответы [ 4 ]

13 голосов
/ 02 июня 2010

Я бы использовал Form1_Shown ()

5 голосов
/ 02 июня 2010

Используйте событие Показано . Похоже, что вам нужно, и будет отображаться только при первом показе формы.

Form f1 = new Form();
f1.Shown += new EventHandler(f1_Shown);

public void f1_Shown(object sender, EventArgs e)
{
   // Show dialog in here
}
2 голосов
/ 02 июня 2010

Попробуйте событие «Показано»:

Form.Show Event

2 голосов
/ 02 июня 2010
  • Использование Windows.Forms.Timer - это хорошая, стабильная, хорошо известная и понятная техника для выполнения того, что вы хотите. Я бы избегал любых других объектов таймера.

  • Событие формы Shown работает хорошо.

  • Перегрузка / переопределение метода Show. (Моя предпочтительная техника для большего контроля.) В этом методе я бы сделал необходимую проверку. Когда все будет готово, я вызову метод base.Show, а затем выполню любую другую обработку, такую ​​как окна сообщений, приглашения, ведение журнала и т. Д.

...