|
Обновление контрола из другого потока
|
|||
---|---|---|---|
#18+
День добрый. Вопрос конечно уже заезженный, но почему то решение не работает О_о В общем, имеется AForge для работы с веб-камерой. Но контрол там виндовский. Поэтому забиндить на VideoSource не получается (используем таки MVVM). Вариант - сделать контрол Image и в его Source биндить картинку, получаемую в коде. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36.
private void videoSourcePlayer_NewFrame(object sender, ref Bitmap image) - обработчик события нового кадра, идущего с камеры. Ошибка, "Вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта является другой поток." все равно вылезает. Есть подозрение, что Invoke надо вызывать у самого контрола. Но мы же в MVVM и тут мы тока с Source-ом работаем. Подскажите, пожалуйста, в чем проблема. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 14:29 |
|
Обновление контрола из другого потока
|
|||
---|---|---|---|
#18+
Sky Dragon, Ты хоть и в MVVM - но тебе никто не мешает вызывать Application.Dispatcher ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2013, 10:09 |
|
Обновление контрола из другого потока
|
|||
---|---|---|---|
#18+
unknownfromrus, да, уже вызывал. Но это не помогло. Перенес всю обработку картинки в делегат Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
Эксепшен больше не вылетает. Но изображение не появляется в окне :( Биндинг правильно настроен. OnPropertyChange вызывается... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2013, 10:24 |
|
Обновление контрола из другого потока
|
|||
---|---|---|---|
#18+
unknownfromrus, точнее помогло, но не до конца) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2013, 10:25 |
|
Обновление контрола из другого потока
|
|||
---|---|---|---|
#18+
помнится, в свое время я отказался от Bitmap в пользу WriteableBitmap в качестве Image.Source, но это было не из-за ошибок, а ради быстродействия (пришлось слегка модифицировать AForge, чтобы в NewFrame отгружался не Bitmap а указатель на видеобуфер, из которого далее напрямую в WriteableBitmap.BackBuffer)... а вот как там было первоначально с Bitmap, работало но медленно, уже не вспомню, но наверняка не MVVM ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2013, 12:34 |
|
Обновление контрола из другого потока
|
|||
---|---|---|---|
#18+
LR, Учтем, посмотрим, спасибо ) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2013, 13:09 |
|
Обновление контрола из другого потока
|
|||
---|---|---|---|
#18+
LR, Забавно. Просто поменял на WriteableBitmap, создавая его new WriteableBitmap(image); И изображение появилось... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2013, 13:15 |
|
Обновление контрола из другого потока
|
|||
---|---|---|---|
#18+
Sky Dragon, ))) забавно, но Вы же понимаете, что неэффективно на каждый кадр создавать новый WriteableBitmap, эффективно работать с его BackBuffer, с последующим AddDirtyRect для обновления (для этого достаточно "упростить" AForge...VideoCaptureDevice.Grabber.BufferCB - не создавать там Bitmap, а сразу отгружать IntPtr buffer подписчикам NewFrame) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2013, 13:44 |
|
|
start [/forum/topic.php?fid=21&fpage=33&tid=1441506]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 311ms |
total: | 440ms |
0 / 0 |