Основная форма перестает отвечать - PullRequest
1 голос
/ 22 марта 2011

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

Как я могу решить это ... любая идея!

Ответы [ 4 ]

2 голосов
/ 22 марта 2011

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

1 голос
/ 23 марта 2011

Как уже упоминалось, вы должны назначать длительные задачи рабочему потоку или потоку пула потоков.

Имейте в виду, что количество потоков резьбы ограничено. ALso Windows формы не являются потокобезопасными, поэтому вы не должны напрямую обновлять форму из созданного потока. Вы можете использовать InvokeRequired.

1 голос
/ 22 марта 2011

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

Решением является использование потоков .

0 голосов
/ 03 сентября 2014

В этом случае лучше использовать класс BackgroundWorker.Подробности в следующей ссылке.

http://stuff.seans.com/2009/05/21/net-basics-do-work-in-background-thread-to-keep-gui-responsive/

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