void SynchronizeParameters(ProbeDialog dlg) { List <DiscoveryType> oldTypes = new List <DiscoveryType>(_types); List <string> oldScopes = new List <string>(_scopes); foreach (ListViewItem item in dlg.TypesList.Items) { string type = item.SubItems[0].Text; string ns = item.SubItems[1].Text; DiscoveryType t = oldTypes.Where(T => T.Type == type && T.Namespace == ns).FirstOrDefault(); if (t == null) { DiscoveryType newType = new DiscoveryType() { Type = type, Namespace = ns }; _types.Add(newType); } else { oldTypes.Remove(t); } } foreach (DiscoveryType t in oldTypes) { _types.Remove(t); } foreach (ListViewItem item in dlg.ScopesList.Items) { string scope = item.SubItems[0].Text; if (_scopes.Contains(scope)) { oldScopes.Remove(scope); } else { _scopes.Add(scope); } } foreach (string scope in oldScopes) { _scopes.Remove(scope); } }
private void btnProbe_Click(object sender, EventArgs e) { ProbeDialog dlg = new ProbeDialog(); dlg.InitializeTypes(_types); dlg.InitializeScopes(_scopes); DialogResult result = dlg.ShowDialog(); if (result == DialogResult.Cancel) { return; } SynchronizeParameters(dlg); InitializeDiscoveryClient(dlg.DiscoveryVersion); lvDevices.Items.Clear(); FindCriteria request = new FindCriteria(); request.ScopeMatchBy = new Uri("http://schemas.xmlsoap.org/ws/2005/04/discovery/rfc3986"); foreach (ListViewItem item in dlg.TypesList.CheckedItems) { XmlQualifiedName type = new XmlQualifiedName(item.SubItems[0].Text, item.SubItems[1].Text); request.ContractTypeNames.Add(type); } foreach (ListViewItem item in dlg.ScopesList.CheckedItems) { request.Scopes.Add(new Uri((item.SubItems[0].Text))); } request.Duration = new TimeSpan(0, 0, 0, 10, 0); btnProbe.Enabled = false; _discoveryClient.FindAsync(request); }