[英]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)中调用此方法。 我应该怎么做?
非常感谢您的帮助。
如果要在找到新Device
后立即更新UI,则只需要ObservableCollection
和Task
。 例如:
在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.