2010-06-25 31 views
5

Tôi đang cố gắng cung cấp bản xem trước trực tiếp các tài liệu XPS mà không cần treo chuỗi giao diện người dùng của mình. Mở tài liệu là đủ nhanh, nhưng khi tôi gọi GetFixedDocumentSequence(), giao diện người dùng của tôi sẽ không phản hồi trong vài giây trong khi tài liệu này chuồn đi.Bất kỳ đề xuất nào để xử lý vấn đề hiệu suất GetFixedDocumentSequence XpsDocument?

// creating the doc is fine (0.005 seconds) 
XpsDocument doc=new XpsDocument("BigFile.xps",FileAccess.Read); 
// this hangs the UI for several seconds 
FixedDocumentSequence seq=XpsDocument.GetFixedDocumentSequence(); 
// Once I have the sequence, GetPageAsync lets me pull out pages without breaking the UI 
// .... 

Các giải pháp rõ ràng là để mở tài liệu trên một sợi công nhân, nhưng FixedDocumentSequence được gắn với các chủ đề đã tạo ra nó, vì vậy tôi không thể truy cập nó từ thread UI, và nếu tôi cố gắng gọi GetPageAsync từ chuỗi công nhân Tôi nhận được một ngoại lệ vì DocumentPages chứa hình ảnh.

Điều duy nhất tôi có thể nghĩ là tạo tài liệu trên một chuỗi giao diện người dùng riêng biệt, chia tài liệu thành các trang và sau đó lưu các trang đó dưới dạng tệp XPS mà chuỗi giao diện người dùng mở. Nhưng điều đó có vẻ như một giải pháp khủng khiếp phức tạp. Có ai biết nếu có một cách khác để có được các DocumentPages mà không dựa vào FixedDocumentSequence?

Trả lời

1

Có một giải pháp đơn giản. Nó được gọi là giao diện người dùng đa luồng và nó giúp bạn làm tất cả mọi thứ như bạn sẽ làm, nhưng có hai chủ đề giao diện người dùng thay vì một. Nó có nghĩa là XPS của bạn có thể tải trên một chuỗi giao diện người dùng riêng biệt mà không có bất kỳ vấn đề gì. Tôi đã tự mình thực hiện nó trong quá khứ, và nó rất tốt.

http://blogs.msdn.com/b/dwayneneed/archive/2007/04/26/multithreaded-ui-hostvisual.aspx

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