2012-02-12 19 views
5

Tôi hiện đang vật lộn với chủ đề và hy vọng rằng ai đó có thể giải thích rõ ràng cách giải quyết lỗi sau.Truy cập các mục từ điển được mô tả trong chủ đề con

Tôi có toàn cầu Dictionary<string, BitmapImage> dic mà tôi khởi tạo trong chuỗi chính.

Chủ đề chính tạo chuỗi con để điền từ điển có hình ảnh.

Các chủ đề chính sau đó cố gắng truy cập vào từ điển và ném một ngoại lệ

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

Tôi không có vấn đề truy cập vào từ điển riêng của mình ví dụ dic.ContainsKey("key") hoạt động tốt, chỉ khi tôi cố gắng truy cập BitmapImage trong từ điển mà lỗi xảy ra.

Tôi đoán đó là vì BitmapImages được lưu trữ trong từ điển được khởi tạo trong chuỗi con và nó gây ra sự cố - bất kỳ ý tưởng nào về cách tôi có thể giải quyết vấn đề này?

Tôi đã xem rất nhiều hướng dẫn và lời khuyên ở đây nhưng có vẻ như ở mọi nơi khác cho bạn biết cách truy cập đối tượng chủ đề gốc từ chuỗi con trong khi tôi đang cố gắng làm ngược lại.

Cảm ơn.

+0

đăng mã số (cutdown, nhưng exhibiting behavior) ... –

Trả lời

8

Nói chung, bạn chỉ có thể truy cập các phần tử giao diện người dùng từ chuỗi mà chúng đã được tạo. Có nghĩa là, bạn nên đảm bảo rằng chủ đề chính đang tự tạo ra các đối tượng BitmapImage.

Tuy nhiên, trong trường hợp này, bạn có thể sử dụng thực tế, rằng BitmapImage có thể được sử dụng từ các chủ đề khác nhau sau khi chúng đã được cố định (với phương thức Freeze()). Do đó, bạn có thể thử tạo ảnh trên các chủ đề con, đóng băng chúng và sau đó thêm chúng vào từ điển của bạn (đảm bảo bạn thực hiện theo cách an toàn, ví dụ bằng cách khóa một số đối tượng mutex trước khi truy cập từ điển).

Thông tin khác có thể được tìm thấy trên trang web Freezeable Objects Overview.

+0

Tôi không thể tin nó đơn giản như vậy - 4 giờ đập đầu vào tường và tôi nhận được câu trả lời trong chưa đầy 10 phút, cảm ơn Ravadre! !! – Gavimoss

+0

@Gavimoss Chào mừng bạn :-), điều thú vị là tôi đã khám phá phương pháp này ngày hôm qua. –

Các vấn đề liên quan