![]() |
вопрос програмистам на C#
Как добится в C# еффекта анологичного Application.ProcessMessages в делфи? То есть чтобы во время интенсивной работы приложения можно было нажимать кнопки на форме в часности чтобы остановить алгоритм.
|
Используй потоки (threads).
2 варианта написания: 1) создаешь поток через ThreadPool и контролируешь его (остановка/запуск) с помощью event'ов 2) Более правильный вариант. Создать объект Thread, запустить его. Поскольку объект в твоих руках - ты полностью контролируешь его. Когда захочешь - сделаешь Suspend, захочешь - Resume. |
Попробуй использовать делегат для запуска этих вычилений и один из его методов Invoke или BeginEnvoke, т.е. асинхронные или синхронные делегаты.
Всё это не плохо описано Крисом Селлзом (Chris Sells), прямые линки на статейки по русски: _http://www.gotdotnet.ru/LearnDotNet/NETFramework/599.aspx _http://www.gotdotnet.ru/LearnDotNet/NETFramework/598.aspx _http://www.gotdotnet.ru/LearnDotNet/NETFramework/596.aspx |
Da(nil)ka
И чем это по-твоему отличается от 1-го способа? Тот-же самый ThreadPool, только в этом случае для контроля над остановкой придется использовать events в самой функции алгоритма, что не есть красиво. |
а не проще ли Application.DoEvents() ?
|
aramis
Интересо, а ты шапку читал? Человеку надо не просто запустить вычисления асинхронно, а управлять ими: остановить или запустить вновь. |
Цитата:
|
Цитата:
|
Yan1k
> "Поточные функции не поддерживают входных параметров" Кто это Вам сказал? WaitCallback использующийся в ThreadPool имеет signature метода с входным параметром и возвр. void : ThreadPool.QueueUserWorkItem( new WaitCallback( this.PostInitCallback ) ); ... private void PostInitCallback( object state ) { ... В любом случае, как я говорил, использование ThreadPool не самый лучший способ. Я предпочел бы создание своего объекта Thread. aramis > "чтобы обработать те действия, которые стоят "в очереди" у формы( прорисовка и тд). обработка кнопок " А причем здесь прорисовка кнопок и другие действия формы ??? Все человеку надо - это запустить алгоритм вычислений в background'е и иметь возможность остановить/возобновить его. |
Цитата:
|
[QUOTE='[Ghost]']Yan1k
> "Поточные функции не поддерживают входных параметров" Кто это Вам сказал? WaitCallback использующийся в ThreadPool имеет signature метода с входным параметром и возвр. void : ThreadPool.QueueUserWorkItem( new WaitCallback( this.PostInitCallback ) ); ... private void PostInitCallback( object state ) { ... В любом случае, как я говорил, использование ThreadPool не самый лучший способ. Я предпочел бы создание своего объекта Thread. Я и имел ввиду не то что используется в ThreadPool, а обычный поток, у него поточная функция БЕЗ параметров. |
| Часовой пояс GMT +4, время: 15:50. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.