我是论坛的新手。对不起,我的英语......不太好。
拜托,我读了这篇文章: 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并抱歉!
答案 0 :(得分:0)
要使用在UI中自动更新的值显示DataGrid中的项列表,您需要将DataGrid绑定到实现INotifyPropertyChanged接口的ObservableCollection对象。
执行实际ping的代码将驻留在ViewModel中,ViewModel也将包含ObservableCollection。该代码将定期迭代ObservableCollection中的对象,并使用ping结果更新每个对象的所需公共属性,这些值将在DataGrid中自动更新,因为它们实现了INotifyPropertyChanged接口。