[英]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.