Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
47 / 47 / 9
Регистрация: 13.02.2012
Сообщений: 176
1

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

03.04.2012, 10:38. Просмотров 1184. Ответов 4
Метки нет (Все метки)

Добрый день. Проблема такая.
Есть 2 класса. Первый MyLogic - отвечает за логику приложения, второй MyApplication - отвечает за его представление.
Есть процесс, который занимает довольно длительное время. Я хочу, чтобы пока он обрабатывается, интерфейс приложения не умирал. Для этого я отправляю этот процесс в отдельный thread, по завершении которого вызывается событие all_done. Класс MyApplication подписан на это событие.
Однако в итоге я получаю System.InvalidOperationExcepti on
{"The calling thread cannot access this object because a different thread owns it."}

Как решить такую проблему? Как уведомить 1 thread о том что 2 закончил свою работу?
Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2012, 10:38
Ответы с готовыми решениями:

Как сделать, чтобы один поток не закончил работу, пока второй работает?
Подскажите, есть например 2 потока, которые ну например отсчитывают в цикле до 100. Как сделать...

Как программно узнать закончил ли ZIP свою работу ?
Тот класс переделал, только не могу понять как всётаки получить ответ что ZIP закончил свою работу...

Как узнать закончил ли поток работу?
Для создания потоков использую ThreadPool.QueueUserWorkItem Как узнать когда, потоки закончат...

Как определить закончил ли работу поток?
Здравствуйте, как определить закончил ли работу поток? begin Potok1 :=...

4
Эксперт .NET
13457 / 10427 / 2739
Регистрация: 17.09.2011
Сообщений: 17,713
Завершенные тесты: 1
03.04.2012, 11:00 2
У вас проблема не в уведомлении, а в том, что вы пытаетесь обновлять интерфейс из второго потока, что по умолчанию запрещено.
0
189 / 144 / 27
Регистрация: 02.05.2011
Сообщений: 467
03.04.2012, 11:26 3
Используйте класс BackgroundWorker. Работа с ним очень проста. Он как раз имеет событие ProgressChanged - чтобы указывать на то, что что-то да изменилось.
http://msdn.microsoft.com/ru-ru/libr...undworker.aspx
0
47 / 47 / 9
Регистрация: 13.02.2012
Сообщений: 176
03.04.2012, 13:10  [ТС] 4
Спасибо. BackgroundWorker сейчас посмотрю.
Я как бы понял что нельзя обновлять интерфейс из другого потока, но меня это и смутило. Я же пытаюсь сделать это через Event.
Кроме background worker есть еще какие-нибудь варианты получить отклик из 2 потока в первый?
0
Эксперт Java
4058 / 3793 / 743
Регистрация: 18.05.2010
Сообщений: 9,330
Записей в блоге: 11
Завершенные тесты: 1
03.04.2012, 13:44 5
Пишете, что пишете-то вы вроде бы правильно, но нужно код увидеть: как запускаете поток, как подписываетесь на событие.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.04.2012, 13:44

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

Закончил ли свою работу animate, toggle
Вот к примеру есть код спойлера: var Spoiler = { showClass: 'plus', hideClass: 'minus', ...

Как уведомить клиента о том что сервер закрыл socket
Как уведомить клиента о том что сервер закрыл socket. Допустим у меня есть клиент который...

Как синхронизировать потоки, чтобы сначала один поток, затем первый завершался и начинался второй
Как синхронизировать потоки, чтобы сначала один поток, затем первый завершался и начинался второй...

Как в VBA узнать когда процесс закончил работу?
Как в VBA узнать когда процесс закончил работу? И существует работа с процессами в VBA

Наложение двух слоев так, что один перекрывает второй, но и второй может перекрывать первый
Добрый день форумчане, простенький вопрос: Есть PSD-файл с изображением фэнтези-персонажа в руку...

Как в С++ Builder из 2х потоков рисовать на форме квадратики(это первый поток рисует) и кружочки (2ой поток))
Помогите пожалуйсмта))))) Как в С++ Builder из 2х потоков рисовать на форме квадратики(это первый...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.