Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: 6301
Последний выпуск: 19.06.2015

Как вернуть значение главному потоку (Форме)?

85K
05 октября 2012 года
Necrolog
4 / / 05.10.2012
Язык C#. DotNet 4
Есть необходимость получить скажем список значений (List <T>) из другого потока в основной. Второй поток представляет собой работающий TCPListener от Sockets который читает данные а складывает их в список. Попотка сделать так как приводит пример MSDN не увенчалась успехом. Пhи проверке получается что CAllback обрабатывается в другом потоке а не в основном. Вопросы:
Как реализовать возврат значения из потока в котором работает сокет, в основной поток приложения?
Может я чего-то не знаю и вернут принятые значения из порта сокета можно как-то по другому в основной поток..
85K
05 октября 2012 года
mgnstudio
4 / / 26.09.2012
List <T> создает объект ссылочного типа, создай его в основном потоке, и потом делай с ним что хочешь, и из любого потока. только убедись в том что одновременно к объекту не обращаются несколько потоков(есть спец конструкции).
Вот и все)
85K
05 октября 2012 года
Necrolog
4 / / 05.10.2012
Да уж простые решения самые лучшие.(но обычно начинаешь мудрить).
85K
05 октября 2012 года
mgnstudio
4 / / 26.09.2012
Если не получится пиши, порешаем)
85K
05 октября 2012 года
Necrolog
4 / / 05.10.2012
Все прекрасно, но как узнать что переменная типа List<t> изменилась (обработчик события не знаю как осуществить) и чтобы при этом вся обработка в главном потоке шла. Не хочется через таймер.
40K
09 октября 2012 года
D129
228 / / 18.04.2012
Цитата: Necrolog
но как узнать что переменная типа List<t> изменилась (обработчик события не знаю как осуществить)



Во первых - поищите коллекцию, которая уже это делает. ObservableCollection, если я правильно помню.

Если не хотите - сделайте свой класс, с коллекцией внутри и эвентом, который поднимается при изменении коллекции, и когда будете создавать инстанс этого класса, подпишитесь на его эвент.

И не забудьте, что эвент потока не меняет, где его подняли, там он и бежит.

85K
09 октября 2012 года
Necrolog
4 / / 05.10.2012
Цитата: D129
Цитата: Necrolog
но как узнать что переменная типа List<t> изменилась (обработчик события не знаю как осуществить)



Во первых - поищите коллекцию, которая уже это делает. ObservableCollection, если я правильно помню.

Если не хотите - сделайте свой класс, с коллекцией внутри и эвентом, который поднимается при изменении коллекции, и когда будете создавать инстанс этого класса, подпишитесь на его эвент.

И не забудьте, что эвент потока не меняет, где его подняли, там он и бежит.


Благодарю. Но мне необходимо вести обработку в основном потоке приложения. А данные складывать из других.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог