2016-06-02 6 views
0

Ich bin neu im Forum. Sorry für mein Englisch ... Es ist nicht sehr gut.Erstellen Sie einen PING-Monitor in WPF-Anwendung - mit DataGrid

Bitte, las ich den Artikel: How to Perform Multiple "Pings" in Parallel using C#

Bitte, mir jemand eine Hilfe und erklären, wie kann ich ein WPF-Datagrid füllen Sie eine Liste von IP-Adressen zu überwachen?

Ich baue ich eine Klasse:

... public class Servermonitor { public string ID {gesetzt; bekommen; } öffentliche Zeichenfolge Timeout {set; bekommen; } öffentliche Zeichenfolge IP {set; bekommen; } öffentliche Zeichenfolge TTL {set; bekommen; } } ...

In der Hauptmethode habe ich es zeigen Daten in Datagridview.

 MonitorPing.PingAddressesAsync(new List<IPAddress>() { 
      IPAddress.Parse ("XXX.XXX.XXX.XXX"), 
      IPAddress.Parse ("XXX.XXX.XXX.XXX"), 
      IPAddress.Parse ("XXX.XXX.XXX.XXX"), 
      IPAddress.Parse ("XXX.XXX.XXX.XXX") 
     }, delegate (Task<List<PingReply>> tpr) 
     { 
      var lr = tpr.Result; 

      foreach (var pr in lr) 
      { 
       //This correct 
       Dispatcher.BeginInvoke(DispatcherPriority.Normal,(ThreadStart)(() => dataGrid.Items.Add(new ServerMonitor { ID = pr.Buffer.ToString(), Timeout = pr.Status.ToString(), IP = pr.Address.ToString(), TTL = pr.RoundtripTime.ToString() }))); 
      } 
     }); 
    } 

An diesem Punkt ist es in Ordnung.

Aber wie bekomme ich die Daten in Echtzeit aktualisiert werden? Ich benutze eine Weile, verwenden Sie ein System.Timer ...

Tks und Entschuldigung für alles!

+3

Wo stecken Sie fest? Probieren Sie es aus und wenn Sie auf Probleme stoßen, kommen Sie mit einer spezifischen Frage zurück. Wir sind nicht hier, um Bewerbungen für Sie zu schreiben. Vielleicht möchten Sie http://stackoverflow.com/help/how-to-ask lesen – itsme86

+1

@ itsme86 Zugegeben, ich bin nicht gut in C oder WPF, aber "Bitte, jemand gebe mir eine Hilfe und zu erklären, wie kann ich Füllen Sie ein WPF Datagrid auf, um eine Liste von IPs zu überwachen? " scheint eine spezifisch genug Frage zu sein. Sie fragen nach einer bestimmten Sache. –

+3

@XamuelSchulman Ich stimme nicht zu. "Wie baue ich ein Haus?" scheint auch eine Frage über etwas Spezifisches zu sein, aber was Sie wirklich tun müssen, ist etwas wie "Ich versuche ein Haus zu bauen, aber während ich das Fundament lege, passiert X. Hier ist der Prozess, den ich benutze, um das zu legen Fundament. Kann jemand darauf hinweisen, wo der Prozess fehlerhaft ist und wie man ihn korrigiert? " – itsme86

Antwort

0

Um eine Liste von Elementen im DataGrid mit Werten anzuzeigen, die automatisch in der Benutzeroberfläche aktualisiert werden, müssen Sie Ihr DataGrid an eine ObservableCollection von Objekten binden, die die INotifyPropertyChanged-Schnittstelle implementieren.

Der Code, der das tatsächliche Ping durchführt, würde sich in Ihrem ViewModel befinden, das auch die ObservableCollection enthalten wird. Dieser Code würde die Objekte in dieser ObservableCollection regelmäßig durchlaufen und die gewünschten öffentlichen Eigenschaften jedes Objekts mit Ping-Ergebnissen aktualisieren, und diese Werte werden im DataGrid automatisch aktualisiert, da sie die INotifyPropertyChanged-Schnittstelle implementieren.

+0

Hallo Dean Kga! Danke vielmals! – EduT