繁体   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