imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 13.12.2004, 23:44     # 1
palexv
Guest
 
Сообщения: n/a

вопрос програмистам на C#

Как добится в C# еффекта анологичного Application.ProcessMessages в делфи? То есть чтобы во время интенсивной работы приложения можно было нажимать кнопки на форме в часности чтобы остановить алгоритм.
 
Старый 14.12.2004, 04:35     # 2
Dimm
Добрый фей-мод
 
Аватар для Dimm
 
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155

Dimm СуперБогDimm СуперБог
Dimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБог
Используй потоки (threads).

2 варианта написания:

1) создаешь поток через ThreadPool и контролируешь его (остановка/запуск) с помощью event'ов

2) Более правильный вариант. Создать объект Thread, запустить его. Поскольку объект в твоих руках - ты полностью контролируешь его.
Когда захочешь - сделаешь Suspend, захочешь - Resume.
__________________
Фотолюбительщина

Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью.
Dimm вне форума  
Старый 14.12.2004, 11:47     # 3
Da(nil)ka
Member
 
Регистрация: 12.01.2003
Сообщения: 252

Da(nil)ka Популярный человек на этом форумеDa(nil)ka Популярный человек на этом форумеDa(nil)ka Популярный человек на этом форумеDa(nil)ka Популярный человек на этом форумеDa(nil)ka Популярный человек на этом форумеDa(nil)ka Популярный человек на этом форумеDa(nil)ka Популярный человек на этом форуме
Попробуй использовать делегат для запуска этих вычилений и один из его методов 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 вне форума  
Старый 14.12.2004, 12:43     # 4
Dimm
Добрый фей-мод
 
Аватар для Dimm
 
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155

Dimm СуперБогDimm СуперБог
Dimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБог
Da(nil)ka

И чем это по-твоему отличается от 1-го способа? Тот-же самый ThreadPool,
только в этом случае для контроля над остановкой придется использовать events в самой функции алгоритма, что не есть красиво.
__________________
Фотолюбительщина

Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью.
Dimm вне форума  
Старый 14.12.2004, 17:39     # 5
aramis
Junior Member
 
Регистрация: 31.10.2002
Сообщения: 150

aramis Путь к славе только начался
а не проще ли Application.DoEvents() ?
aramis вне форума  
Старый 14.12.2004, 17:43     # 6
Dimm
Добрый фей-мод
 
Аватар для Dimm
 
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155

Dimm СуперБогDimm СуперБог
Dimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБог
aramis

Интересо, а ты шапку читал? Человеку надо не просто запустить вычисления асинхронно, а управлять ими: остановить или запустить вновь.
__________________
Фотолюбительщина

Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью.
Dimm вне форума  
Старый 14.12.2004, 18:03     # 7
Yan1k
Guest
 
Сообщения: n/a

Цитата:
Сообщение от [Ghost]
Da(nil)ka

И чем это по-твоему отличается от 1-го способа? Тот-же самый ThreadPool,
только в этом случае для контроля над остановкой придется использовать events в самой функции алгоритма, что не есть красиво.
Это отличается от Вашего способа. Поточные функции не поддерживают входных параметров, а, используя делегаты, можно передавать свои значения. Не обязательно использовать event для остановки, об этом говорится в статейкай, ссылки на которые приведены выше. И имхо в любом случае, если из дополнительных "рабочих" потоков мы будем изменять что-то в GUI интерфейсе, то нам придётся передавать управление в его поток. Для этого либо использовать Invoke, BeginInvoke контролов формы, либо написать функцию, и оборачивать её делегатом.
 
Старый 14.12.2004, 18:12     # 8
aramis
Junior Member
 
Регистрация: 31.10.2002
Сообщения: 150

aramis Путь к славе только начался
Цитата:
Сообщение от [Ghost]
aramis

Интересо, а ты шапку читал? Человеку надо не просто запустить вычисления асинхронно, а управлять ими: остановить или запустить вновь.
если я правильно понял DoEvents, то эта функция приостанавливает действие проги, чтобы обработать те действия, которые стоят "в очереди" у формы( прорисовка и тд). обработка кнопок к ним не относится?
aramis вне форума  
Старый 14.12.2004, 19:22     # 9
Dimm
Добрый фей-мод
 
Аватар для Dimm
 
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155

Dimm СуперБогDimm СуперБог
Dimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБог
Yan1k

> "Поточные функции не поддерживают входных параметров"

Кто это Вам сказал? WaitCallback использующийся в ThreadPool имеет signature метода с входным параметром и возвр. void :

ThreadPool.QueueUserWorkItem( new WaitCallback( this.PostInitCallback ) );
...

private void PostInitCallback( object state )
{
...

В любом случае, как я говорил, использование ThreadPool не самый лучший способ. Я предпочел бы создание своего объекта Thread.


aramis

> "чтобы обработать те действия, которые стоят "в очереди" у формы( прорисовка и тд). обработка кнопок "


А причем здесь прорисовка кнопок и другие действия формы ???
Все человеку надо - это запустить алгоритм вычислений в background'е и иметь возможность остановить/возобновить его.
__________________
Фотолюбительщина

Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью.
Dimm вне форума  
Старый 14.12.2004, 19:33     # 10
aramis
Junior Member
 
Регистрация: 31.10.2002
Сообщения: 150

aramis Путь к славе только начался
Цитата:
Сообщение от [Ghost]
Yan1k

aramis

> "чтобы обработать те действия, которые стоят "в очереди" у формы( прорисовка и тд). обработка кнопок "


А причем здесь прорисовка кнопок и другие действия формы ???
Все человеку надо - это запустить алгоритм вычислений в background'е и иметь возможность остановить/возобновить его.
ну, про background речи и не было. если я правильно понял palexv, то он хотел чтобы его форма реагировала на внешние раздражители даже при "полном загрузе" и исходил из этого
aramis вне форума  
Старый 14.12.2004, 19:36     # 11
Yan1k
Guest
 
Сообщения: n/a

[QUOTE='[Ghost]']Yan1k

> "Поточные функции не поддерживают входных параметров"

Кто это Вам сказал? WaitCallback использующийся в ThreadPool имеет signature метода с входным параметром и возвр. void :

ThreadPool.QueueUserWorkItem( new WaitCallback( this.PostInitCallback ) );
...

private void PostInitCallback( object state )
{
...

В любом случае, как я говорил, использование ThreadPool не самый лучший способ. Я предпочел бы создание своего объекта Thread.


Я и имел ввиду не то что используется в ThreadPool, а обычный поток, у него поточная функция БЕЗ параметров.
 

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 15:55.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.