2016-06-01 5 views
0

내가 네트워크를 스캔하기위한 클래스가 있습니다업데이트 수집 및 순간 WPF

나는 새로운 Device이 발견 된 즉시 내 UI를 업데이트 할
public class Network { 
    public event NewDeviceHandler NewDevice; 
    public event ScanFinishedHandler ScanFinished; 
    //... 
    public void Scan() { /* ... */ } 
} 

. 이 경우 가장 좋은 방법은 무엇입니까? 이벤트를 사용해야합니까, 아니면 ObservableCollection과 같은 것을 사용하는 것이 더 좋습니까?

그리고이 메서드는 내 UI 스레드 (WPF)에서 호출해야합니다. 어떻게해야합니까?

  • 은/스캔 - 방법
  • 사용 asnyc에서 새 작업 만들기 - 응용 프로그램 UI
  • 내에서 새 작업 만들기

는 당신의 도움을 주셔서 감사 기다리고 있습니다.

답변

1

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(); 
}