簡體   English   中英

使用多線程和WPF更新集合

[英]Update Collection with multithreading and WPF

目前,我有一個用於掃描網絡的課程:

public class Network {
   public event NewDeviceHandler NewDevice;
   public event ScanFinishedHandler ScanFinished;
   //...
   public void Scan() { /* ... */ }
}

我想在找到新Device后立即更新我的UI。 在這種情況下,最佳做法是什么? 我應該使用事件還是最好使用ObservableCollection之類的東西?

而且我必須在我的UI線程(WPF)中調用此方法。 我應該怎么做?

  • 在我的UI應用程序中創建一個新任務
  • 在掃描方法中創建一個新任務
  • 使用asnyc /等待

非常感謝您的幫助。

如果要在找到新Device后立即更新UI,則只需要ObservableCollectionTask 例如:

Network課程中:

public event NewDeviceHandler<Device> NewDevice;

public void  StartScan()
{
    Task.Run(() => Scan() );
}

在視圖模型中:

public ObservableCollection<Device> DevicesCollection { get; set; }

在后面的代碼中:

private Network networkService = new Network();
...
// Somewhere in initialization code:
networkService.NewDevice += (sender, device) => Dispatcher.Invoke(() => viewModel.DevicesCollection.Add(device) );
...
private void ScanButton_OnClick(object sender, RoutedEventArgs e)
{
    viewModel.DevicesCollection.Clear();
    networkService.StartScan();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM