Gần đây tôi đã bắt đầu lập trình trong WPF và gặp phải vấn đề sau. Tôi không hiểu cách sử dụng phương thức Dispatcher.Invoke()
. Tôi có kinh nghiệm về luồng và tôi đã thực hiện một vài chương trình Windows Forms đơn giản, nơi tôi vừa sử dụngThay đổi điều khiển WPF từ một chủ đề không chính bằng Dispatcher.Invoke
Control.CheckForIllegalCrossThreadCalls = false;
Vâng tôi biết đó là khá đơn giản nhưng đây là những ứng dụng giám sát đơn giản. Thực tế là bây giờ tôi đang làm một ứng dụng WPF lấy dữ liệu trong nền, tôi bắt đầu một chủ đề mới để thực hiện cuộc gọi để lấy dữ liệu (từ một máy chủ web), bây giờ tôi muốn hiển thị nó trên WPF của tôi hình thức. Vấn đề là, tôi không thể thiết lập bất kỳ điều khiển từ chủ đề này. Thậm chí không có nhãn hay gì cả. Vấn đề đó được giải quyết như thế nào?
trả lời bình luận:
@Jalfp:
Vì vậy, tôi sử dụng phương pháp Dispatcher này trong 'lốp mới' khi tôi nhận được dữ liệu? Hoặc tôi nên làm cho một nhân viên nền lấy dữ liệu, đưa nó vào một lĩnh vực và bắt đầu một chủ đề mới cho đến khi trường này được lấp đầy và gọi điều phối viên để hiển thị dữ liệu đã truy xuất vào các điều khiển?
Bạn có thể thoát khỏi những 'hành động mới (' một phần, và chỉ cần sử dụng một biểu thức lambda: DispatcherPriority.Background,() => this.progressBar.Value = 50 – jrista
Ừ không biết tại sao tôi đặt một Hành động ở đây: p – japf
Vì vậy, tôi sử dụng phương pháp này Dispatcher trong 'mới tread' khi tôi nhận được dữ liệu? Hoặc tôi nên làm cho một nhân viên nền lấy dữ liệu, đặt nó vào một lĩnh vực và bắt đầu một thread mới chờ đợi cho đến khi lĩnh vực này là điền và gọi điều phối để hiển thị dữ liệu đã truy xuất vào các điều khiển? –