2012-02-12 4 views
5

В настоящее время я занимаюсь нитями и надеюсь, что кто-то может четко объяснить, как разрешить следующую ошибку.Доступ к элементам словаря, созданным в дочерней цепочке

У меня есть глобальный Dictionary<string, BitmapImage> dic, который я создаю в основной теме.

Основной поток создает дочерний поток для заполнения словаря изображениями.

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

The calling thread cannot access this object because a different thread owns it

У меня нет никаких проблем с доступом самого словаря например dic.ContainsKey("key") работает просто отлично, это просто, когда я пытаюсь получить доступ к BitmapImage в словаре, что ошибка возникает.

Я предполагаю, что это связано с тем, что BitmapImages, хранящиеся в словаре, создаются в дочернем потоке, и это вызывает проблему - любые идеи, как я могу обойти это?

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

Спасибо.

+0

опубликуйте ваше сообщение (вырезание, но выставляемое поведение) код ... –

ответ

8

В общем, вы можете получить доступ только к элементам пользовательского интерфейса из созданной им нити. Это означает, что вы должны убедиться, что основной поток создает объекты BitmapImage сам по себе.

Однако в этом случае вы можете использовать тот факт, что BitmapImage может использоваться из разных потоков после их замораживания (с использованием метода Freeze()). Поэтому вы можете попытаться создать изображения в дочерних потоках, заморозить их и затем добавить их в свой словарь (убедитесь, что вы делаете это в потоковом режиме, например, блокируя некоторый объект mutex до доступа к словарю).

Дополнительную информацию можно найти на сайте Freezeable Objects Overview.

+0

Не могу поверить, что это было так просто - 4 часа избиения моей головы против стены, и я получаю ответ менее чем за 10 минут, благодаря Равадре! !! – Gavimoss

+0

@Gavimoss Ваше приветствие :-), смешно, что я вчера сам обнаружил этот метод. –

Смежные вопросы