Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
19.03.2015, 15:05
|
|||
---|---|---|---|
|
|||
Invoke event`а |
|||
#18+
Добрый день! Не могу найти никак ответ на свой вопрос! Помогите, пожалуйста! Есть у меня класс. Он работает с оборудованием по ком порту, общается с ним, играет в карты и пр. Иногда он дёргает event и сообщает что выиграл в карты передаёт подписчикам данные. В главной программе у меня создаётся экземпляр такого класса и я подписываюсь на событие. По событию я сразу пихаю данные на форму. Ну и само собой получаю кросспотоковую ошибку. На данный момент решаю это проверкой контрола InvokeRequired и самим Invok`ом. Вопрос: можно ли как-то сделать, чтобы по событию, меоды которые на него подписаны выполнялись в основном потоке, чтобы в дальнейшем при использовании этого класса не надо было заморачиваться со всеми этими Invok`ми? Т.е. как бы сделать invoke уже в самом классе. Хочу так же обратить внимание, что этот класс будет использоваться как в WF так и в WPF. Т.е. речь о применении Invoke тут не совсем верна. (просто тестовая версия сейчас на WinForms). ... |
|||
:
Нравится:
Не нравится:
|
|||
|
19.03.2015, 15:23
|
|||
---|---|---|---|
Invoke event`а |
|||
#18+
Алексей Ку.Добрый день! Не могу найти никак ответ на свой вопрос! Помогите, пожалуйста! Есть у меня класс. Он работает с оборудованием по ком порту, общается с ним, играет в карты и пр. Иногда он дёргает event и сообщает что выиграл в карты передаёт подписчикам данные. В главной программе у меня создаётся экземпляр такого класса и я подписываюсь на событие. По событию я сразу пихаю данные на форму. Ну и само собой получаю кросспотоковую ошибку. На данный момент решаю это проверкой контрола InvokeRequired и самим Invok`ом. Вопрос: можно ли как-то сделать, чтобы по событию, меоды которые на него подписаны выполнялись в основном потоке, чтобы в дальнейшем при использовании этого класса не надо было заморачиваться со всеми этими Invok`ми? Т.е. как бы сделать invoke уже в самом классе. Хочу так же обратить внимание, что этот класс будет использоваться как в WF так и в WPF. Т.е. речь о применении Invoke тут не совсем верна. (просто тестовая версия сейчас на WinForms). Есть в "Часто... вопросах". Пример использования делегата, который сам себя вызывает - один раз его вызывает посторонний поток, а потом он сам себя - в главном. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
19.03.2015, 15:25
|
|||
---|---|---|---|
Invoke event`а |
|||
#18+
D129 в "Часто... вопросах".. А кстати, где они? 8-[] ... |
|||
:
Нравится:
Не нравится:
|
|||
|
19.03.2015, 15:29
|
|||
---|---|---|---|
Invoke event`а |
|||
#18+
7398485 - вот там есть, можно обработать чтобы всем контролам подходил. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.03.2015, 10:47
|
|||
---|---|---|---|
|
|||
Invoke event`а |
|||
#18+
Пример хороший, но я совсем не понял как этот пример решает мою задачу. Мне из моего класса, который порождает побочный поток и из него выкидывает данные в качестве аргументов к событию, не надо менять текст на форме. Это должна делать основная программа, которая использует данный класс (в будущем это всё будет оформлено в dll). Я хочу чтобы я/другие кто будет использовать этот класс могли просто создать объект, подписаться на событие и когда оно выстреливает обработка события происходила в основном потоке. А уж обновлять данные на форме или поступать с данными по-другому он сам будет решать. Т.е. сделать некий закрытый ящик из класса, и снять задачу Invoke при его последующем использовании. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.03.2015, 12:30
|
|||
---|---|---|---|
Invoke event`а |
|||
#18+
Алексей Ку., можно попробовать использовать методы Post/Send SynchronizationContext'а. См. здесь . Но лучше вместо потоков использовать Task'и и TaskScheduler. Захватываем в гуевом потоке контекст синхронизации: TaskScheduler.FromCurrentSynchronizationContext и передаём его в класс. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.03.2015, 12:50
|
|||
---|---|---|---|
|
|||
Invoke event`а |
|||
#18+
petalvik, Интересное чтиво. Пока не очень понял как применить, но всё равно интересно. Дело в том, что я там никакие потоки не создаю. Просто изначально у меня приходит событие от SerialPort, после чего данные преобразуются и кидаются в следующий event. Видимо мне DataReceived приходит уже из другого потока. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.03.2015, 14:15
|
|||
---|---|---|---|
|
|||
Invoke event`а |
|||
#18+
Ну и у меня вообще вопрос. Моя затея адекватна? Или стоит оставить контроле взаимодействие с UI на разработчике, использующем мои классы? Ведь использую его он ни сном ни духом не знает какие у меня потоки порождаются и откуда он получает событие. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=20&tablet=1&tid=1401779]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 157ms |
0 / 0 |