在WPF应用程序中创建一个PING监视器 - 使用DataGrid

时间:2016-06-02 15:41:47

标签: c# wpf multithreading monitoring ping

我是论坛的新手。对不起,我的英语......不太好。

拜托,我读了这篇文章: How to Perform Multiple "Pings" in Parallel using C#

请有人给我一个帮助并解释如何填充WPF Datagrid以监控IP列表?

我正在建立一个班级:

...         公共类ServerMonitor         {             公共字符串ID {set;得到; }             public string Timeout {set;得到; }             public string IP {set;得到; }             公共字符串TTL {set;得到; }         } ...

在main方法中,我让它在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() })));
            }
        });
    }

此时,没事。

但是如何让数据实时更新?我用一段时间,使用System.Timer ......

Tks并抱歉!

1 个答案:

答案 0 :(得分:0)

要使用在UI中自动更新的值显示DataGrid中的项列表,您需要将DataGrid绑定到实现INotifyPropertyChanged接口的ObservableCollection对象。

执行实际ping的代码将驻留在ViewModel中,ViewModel也将包含ObservableCollection。该代码将定期迭代ObservableCollection中的对象,并使用ping结果更新每个对象的所需公共属性,这些值将在DataGrid中自动更新,因为它们实现了INotifyPropertyChanged接口。