Tôi có một chương trình với bản đồ Geospace được nhúng vào trong đó. Việc xử lý sự kiện cho bản đồ được xử lý trên một chuỗi riêng biệt để giữ cho bản đồ đáp ứng (ví dụ: các sự kiện kích hoạt khi bản đồ được nhấp vào).C#, WPF, Tự động gọi Dispatcher.Invoke khi cần?
Sự cố tôi gặp phải là khi bản đồ kích hoạt sự kiện, chương trình của tôi cần cập nhật một số thứ trong gui của nó và cũng có thể gọi lại bản đồ để xử lý việc đặt ảnh trên bản đồ.
Tôi đã thử gói toàn bộ phương thức xử lý sự kiện trong this.Dispatcher.Invoke, điều này đặt tôi trở lại luồng giao diện người dùng chính. Điều này hoạt động rất tốt cho việc cập nhật GUI của tôi, nhưng khi tôi gọi lại vào bản đồ, tôi vẫn đang ở trên chuỗi giao diện người dùng có thể gây ra một số vấn đề trong bản đồ.
Về cơ bản, để thực hiện công việc này, tôi sẽ phải chạy dispatcher.invoke mỗi khi tôi muốn thay đổi điều khiển trên gui của mình. Có cách nào tôi có thể tự động làm điều này mà không gói mỗi cuộc gọi trong dispatcher.invoke? Tôi hy vọng tất cả điều này có ý nghĩa.
Heres một số mã ví dụ cho sự kiện tôi đang nói về ..
private void Map_OnMapClicked(object sender, MapClickedEventArgs e)
{
this.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() =>
{
// Do something to update my gui
}));
Map.DoSomethingInTheMap();
this.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() =>
{
// Do something to update my gui
}));
//etc etc etc
}