Dưới đây là những gì tôi có - một ListBox với một ItemsSource thiết lập để một ObservableCollection<T>
- nơi T là lớp tùy chỉnh của tôi đại diện cho một tập tin, chỉ chứa 2 DependencyProperties: Tên file và ThumbnailPath. - Hộp danh sách cũng có DataTemplate tùy chỉnh được xác định, để hiển thị độc đáo hình ảnh và tên tệp bên dưới.không đồng bộ thêm vào ObservableCollection (hoặc thay thế)
Mục đích của hộp danh sách là hiển thị tệp video trong thư mục hiện tại (được chọn trong TreeView), với hình thu nhỏ (được tạo không đồng bộ; không phải là một phần của vấn đề này).
Vì vậy, khi tôi thay đổi thư mục trong TreeView, ObservableCollection sẽ bị xóa và được điền lại, được tự động phản ánh trong các mục ListBox.
Đây là vấn đề: Giao diện người dùng không phản hồi và mất vài giây để cập nhật. Một lần nữa, hình thu nhỏ không có ý nghĩa ở đây (tôi đã cố gắng vô hiệu hóa chúng). Tôi nghĩ rằng những gì mất nhiều thời gian nhất là xây dựng 50-100 trường hợp của lớp tùy chỉnh của tôi, và đại diện trực quan của họ - nó phải khởi tạo một đối tượng hình ảnh cho mỗi một. Nhưng đó chỉ là phỏng đoán của tôi - bạn có thể vui lòng xác nhận hoặc loại trừ khả năng này không?
Tôi bắt đầu nghĩ ObservableCollection có thể không phải là cách để đi ở đây, vì từ những gì tôi đọc và một chút so với những gì tôi đã cố gắng, không có cách nào để thêm các mục đồng bộ, ít nhất nếu các mặt hàng này là DependencyObjects. Tôi đã thử tạo ra các cá thể lớp của tôi với một BackgroundWorker và thêm chúng vào bộ sưu tập trong xử lý sự kiện ProgressChanged, nhưng nó ném một ngoại lệ (một số vấn đề luồng vs dependencyobjects).
Có điều gì đó tôi bị thiếu không? Hoặc tôi sẽ được tốt hơn bằng cách đơn giản là bỏ ObservableCollection và viết một async cũ tốt cho vòng lặp để thêm các mục?
loại ngoại lệ chính xác và thông điệp là gì? – Adam
"Phải tạo DependencySource trên cùng một Thread với DependencyObject" –
Còn về 'Binding, IsAsync = True' thì sao? –