![]() |
Модераторы: gambit, Kefir, Partizan |
![]() ![]() ![]() |
|
vikaz |
|
||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 869 Регистрация: 15.2.2006 Репутация: 1 Всего: 12 |
Всем привет! Возник вопрос. У меня есть пример для работы с один SDK. И там присутствуют подобные функции, как ниже:
Как я понимаю, условие if (!this.Dispatcher.CheckAccess()) позволяет изменить состояния контрола из потока его (контрол) не создававшего. Я для себя решил, что мой класс адаптер будет работать только в WPF приложении. Вопрос, можно ли подобные функции переложить на привязку данных? Т.е. функция UpdateScreenImage будет иметь сл. вид:
, где Bitmap:
Ну а Image будет иметь сл. вид:
Правильно ли все это? Или это в корне неверный подход и нужно делать по другому? ЗЫ. Компилятор, все же, выдает ошибку:"Вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта является другой поток." Хотя я так же через DataBinding, обновляю данные в контроле TextBox, и там таких проблем не возникает. Все работает как часы. :( Может есть у кого-то мысли по этому поводу? Заранее спасибо! Это сообщение отредактировал(а) vikaz - 24.10.2011, 19:42 -------------------- ![]() Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ |
||||||||||||
|
|||||||||||||
Gvozdin |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 9.8.2011 Где: Москва Репутация: 8 Всего: 8 |
Если работа идет не в UI потоке, то этого ни кто кроме вас изменить не сможет. Dispatcher.Invoke как раз и ставит вызов в очередь UI потока.
Весь код который общается с WPF должен делать это в UI потоке. Чем не устраивают Dispatcher.Invoke? --------------------
http://gvozdin.ru |
|||
|
||||
vikaz |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 869 Регистрация: 15.2.2006 Репутация: 1 Всего: 12 |
Они меня устраивали, когда я напрямую из кода обращался к контролу. Но как только я стал исрользовать Property для переброски значения, он перестал меня удовлетворять, так как ошибка осталась. Возможно что-то делаю не так. но в новом классе, я не могу использовать вот такой код:
Могу только вот так:
Но он всегда выдает true Это сообщение отредактировал(а) vikaz - 25.10.2011, 07:59 -------------------- ![]() Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ |
||||||
|
|||||||
Gvozdin |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 9.8.2011 Где: Москва Репутация: 8 Всего: 8 |
Давайте конкретно, на какой строке кода падает?
Dispatcher.CurrentDispatcher.CheckAccess() естественно вернет true, тк это диспетчер привязанный к текущему потоку, если его нет то он создается. Почему this.Dispatcher не можете использовать? Передавайте диспетчер в качестве параметра метода, или вы в любом месте WPF приложения можете использовать Application.Current.Dispatcher, тк UI поток обычно один, то и диспетчер всегда будет нужный. --------------------
http://gvozdin.ru |
|||
|
||||
vikaz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 869 Регистрация: 15.2.2006 Репутация: 1 Всего: 12 |
Gvozdin, спасибо! Передал Dispatcher в мой класс и там его проверяю. Прокатило. СПС!
Это сообщение отредактировал(а) vikaz - 26.10.2011, 18:50 -------------------- ![]() Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ |
|||
|
||||
Frostiboy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 7.11.2011 Репутация: нет Всего: нет |
А это единственный способ?
|
|||
|
||||
Gvozdin |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 9.8.2011 Где: Москва Репутация: 8 Всего: 8 |
Единственный способ чего?
Просто доступ к объектам WPF возможен только из UI потока. --------------------
http://gvozdin.ru |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |