![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
lam0x7C4 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 1.6.2007 Где: Киев Репутация: 1 Всего: 1 |
Всем привет.
О, великие гуру .НЕТа, подскажите пожалуйста, что делать, если: ...есть у нас форма, которая ссылаеться на класс, который виполняет некоторый код в фоновом потоке( например, жмем на кнопку, и в фоне перемножаються матрицы, или еще че-то тяжелое, или Thread.Sleep(5000) ![]() И когда в фоновом потоке вичисления завершаються мы выдаем результат на форму обратным вызовом некоторого метода ShowResult(SomeResultClass someResult)). Но чтоб не випригнул ексепшн о кросспотоковых операция, надо прописывать Invoke. И вроде все работает. Но как сделать, чтоб не пришлось использовать етот Инвоке, ибо не нравитсо мне етот метод. (т.е. как заставить виполняться метод ShowResult в основном потоке.)? |
|||
|
||||
HalkaR |
|
|||
![]() Пуфыстый назгул ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2132 Регистрация: 8.12.2002 Где: В Москве Репутация: 14 Всего: 42 |
Использовать Invoke ![]() FА ообще кури класс BackgroundWorker - он автоматизирует этот процесс. |
|||
|
||||
lam0x7C4 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 1.6.2007 Где: Киев Репутация: 1 Всего: 1 |
BackgourndWorker не юзаю, т.к. мне надо, чтоб была возможность отменять операцию, которая виполняеться в фоне.
BackgourndWorker делает ето очень фигово, если он вообще пытаеться ето сделать, когда его просят. Лучше сначала опишу все подробнее. Xочу написать класс ( Мой_Класс ), который виполняет некоторый код в фоновом потоке. У класса Мой_класс есть делегат Делегат_обратного_вызова, значение которому присваивает клиент. При завершении виполнения должен запуститься метод, на который указывает делегат. Тоесть все должно выглядть где-то так:
Думаю, идея понятна: всякие там Инвоки, делегаты(кроме Делегат_обратного_вызова) не хочу юзать, потому что они должны волновать не клиента, а меня. Вот. п.с. Извините за такой безобразно-гибридный код... Спешил очень ) Это сообщение отредактировал(а) lam0x7C4 - 19.10.2007, 01:04 |
|||
|
||||
LuMee |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 30.3.2007 Репутация: 1 Всего: 1 |
Первая мысль, пришедшая в голову. Вместо того, чтобы создавать объект Мой_Класс из формы, нужно завести некий класс-медиатор, который будет содержать ссылки на форму и на объект Мой_Класс. При создании медиатора ты указываешь ему форму, с которой он должен работать, и делегат Делегат_обратного_вызова, который надо вызвать. Медиатор, в свою очередь, создает у себя объект Мой_Класс, назначая ему в качестве делегата обратного вызова некий свой метод. Этот метод уже и вызывает делегат на форме с помощью Invoke.
|
|||
|
||||
lam0x7C4 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 1.6.2007 Где: Киев Репутация: 1 Всего: 1 |
Спасибо.
|
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |