Событие No Load Complete для формы Windows - PullRequest
1 голос
/ 26 августа 2011

В форме окна при нажатии на кнопку Далее мне нужно отобразить другую форму и начать обработку.Я кодирую в .Net C #

Проблема в том, что до того, как форма будет полностью видна, метод запускается, и начинается обработка, и пользовательский интерфейс выглядит так, как будто он аварийно завершился.Обработка началась еще до загрузки элементов управления.и после завершения обработки все элементы управления становятся видимыми.enter image description here Фактический вывод должен содержать все элементы управления, которые должны быть загружены, а затем должна начаться обработка.enter image description here

Мне нужно вызвать метод, чтобы начать обработку после того, как форма (пользовательский элемент управления) видна и загружена полностью.

Я пытался это и это , но не повезло.

Добавлен код:

private void FeatureRemovalControl_Load(object sender, EventArgs e)
{
    pictureBox2.Image = Properties.Resources.line;
    prgbar.Value = 0;
    //code to load images and some other stuff
    StratProcess();
}

Ответы [ 3 ]

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

Вы звоните StartProcess (который, кажется, блокируется, пока не закончится) из вашего потока пользовательского интерфейса.Поскольку перерисовки WinForms происходят в этом потоке, ничего не нарисовано, и кажется, что ваш процесс завис.Вы должны использовать BackgroundWorker или другой способ асинхронного вызова StartProcess.

2 голосов
/ 26 августа 2011

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

http://msdn.microsoft.com/en-us/library/2e08f6yc(v=vs.71).aspx

0 голосов
/ 26 августа 2011

Попробуйте вызвать этот метод в конце события FormLoad , элемент управления должен завершить загрузку к тому времени. Если это не так, вам может потребоваться выполнить некоторые проверки и, возможно, создать пользовательское событие, которое срабатывает, когда вы счастливы, что оно готово.

Другое решение состоит в том, чтобы иметь кнопку, которую пользователь должен нажать, чтобы запустить обработку, которую он сможет нажать только после того, как все загрузится

РЕДАКТИРОВАТЬ: Причина, по которой это похоже на то, что это происходит, заключается в том, что вы запускаете процесс одним из методов загрузки элемента управления, который, как я полагаю, не является последним элементом управления для загрузки, поэтому он начинает обработку до другие элементы управления могут загружаться. Сделайте метод StratProcess общедоступным и вместо этого вызовите его в методе FormLoad родительской формы, например:

private void ParentForm_Load(object sender, EventArgs e)
{
     FeatureRemovalControl.StratProcess(); // Should it be called StartProcess instead?
}

Остерегайтесь, хотя он все еще выполняет обработку в потоке пользовательского интерфейса, поэтому экран может «зависать», пока это происходит, поэтому я советую переместить его в фоновый поток, как предлагали другие.

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