Экземпляр новой формы в потоке
Моя проблема в том, что я хочу показать что-то вроде заставки, пока приложение занято. Я хотел создать поток, запускающий новую форму с панелью прогресса и небольшой информацией, которую пользователь должен ждать.
Пока все идет хорошо,но форма застывает, когда она появляется. (Если я не делаю обновление, я прокомментировал, форма даже не строится должным образом).
В чем тут проблема?
Что я уже пробовал:
public class WaitFormManager { private Thread waitFormThread; public WaitFormManager() { waitFormThread = new Thread(new ThreadStart(OpenWaitform)); } public void ShowWaitForm() { if (!waitFormThread.IsAlive) { waitFormThread.Start(); } } public void HideWaitForm() { if (waitFormThread.IsAlive) { waitFormThread.Abort(); } } private void OpenWaitform() { WaitForm wf = new WaitForm(); wf.Show(); //wf.Update(); } }
Я назвал форму так:
public static WaitFormManager wfm = new WaitFormManager(); wfm.ShowWaitForm(); //Here we get some stuff done System.Threading.Thread.Sleep(2000); wfm.HideWaitForm();
[no name]
Ну, вы не отформатировали свой код так, чтобы он был читабельным. И вы не отлаживали метод обновления, чтобы узнать, что он делает.
buffedcheesy
.. Поэтому я активировал XSS google для форматирования кода. Функция обновления является частью формы. Он просто перерисовывает области для пользователя. Я хотел проиллюстрировать, что нить работает не так, как я хочу.
Ralf Meier
Я думаю (но не совсем уверен), что ваша идея такого подхода совершенно неверна. Пожалуйста, напишите больше о том, что вы хотите сделать.
Чтобы сохранить ваш пользовательский интерфейс (User-Interface) живым, вам нужно сохранить ваше приложение responsiv - но этого не происходит, потому что вы отправляете свое приложение в спящий режим (2000 миллисекунд). Ваша нить сама по себе тоже ничего не делает - так что же вы думаете, что происходит ?
Dave Kreskowiak
Вы не можете поместить код формы в фоновый поток. Это не сработает. Все элементы пользовательского интерфейса, включая вашу форму, должны находиться в потоке пользовательского интерфейса (startup).
Вы помещаете работу в фоновый поток, а не в пользовательский интерфейс.
Philippe Mori
Обычно вы должны делать наоборот. Отобразите всплеск в потоке пользовательского интерфейса и выполните работу с приложением в фоновом потоке.