Sample code on how to use the Discovery class in Atlas.
public partial class DiscoveryDialog : Form
{
private Discovery _discovery;
public DiscoveryDialog()
{
InitializeComponent();
}
private void DiscoveryDialog_Load_1(object sender, EventArgs e)
{
Start();
}
private void DiscoveryDialog_FormClosing(object sender, FormClosingEventArgs e)
{
}
void _discovery_DeviceError(object sender, DeviceErrorEventArgs e)
{
BeginInvoke((Action)(() => ShowError(e.ErrorMessage)));
}
private void ShowError(string message)
{
MessageBox.Show(message);
}
void _discovery_DeviceLost(object sender, CameraDeviceInfoEventArgs e)
{
BeginInvoke((Action)(() => RemoveDevice(e.CameraDevice)));
}
void _discovery_DeviceFound(object sender, CameraDeviceInfoEventArgs e)
{
BeginInvoke((Action)(() => AddDevice(e.CameraDevice)));
}
private void RemoveDevice(CameraDeviceInfo cameraDeviceInfo)
{
foreach (ListViewItem item in listViewDevices.Items)
{
var device = item.Tag as CameraDeviceInfo;
if (device != null && device.DeviceIdentifier == cameraDeviceInfo.DeviceIdentifier)
{
listViewDevices.Items.Remove(item);
}
}
}
private void AddDevice(CameraDeviceInfo cameraDeviceInfo)
{
foreach (var streamingFormat in cameraDeviceInfo.StreamingFormats)
{
var info = new CameraDeviceInfo(cameraDeviceInfo);
var item = new ListViewItem(string.Format("{0}", cameraDeviceInfo.Name));
if (cameraDeviceInfo.IpSettings != null)
{
item.SubItems.Add(cameraDeviceInfo.IpSettings.IpAddress);
item.SubItems.Add(cameraDeviceInfo.IpSettings.IsWireless ? "Yes" : "No");
}
else
{
item.SubItems.Add("N/A");
item.SubItems.Add("N/A");
}
info.SelectedStreamingFormat = streamingFormat;
item.SubItems.Add(streamingFormat.ToString());
item.Tag = info;
listViewDevices.Items.Add(item);
}
}
@iverbatim
static void DisposeDiscovery(Object context)
{
var discovery = (Discovery)context;
discovery.Dispose();
}
{
_discovery = new Discovery();
_discovery.DeviceFound += _discovery_DeviceFound;
_discovery.DeviceLost += _discovery_DeviceLost;
_discovery.DeviceError += _discovery_DeviceError;
_discovery.Start();
}
{
if (_discovery == null) return;
_discovery.DeviceFound -= _discovery_DeviceFound;
_discovery.DeviceLost -= _discovery_DeviceLost;
_discovery.DeviceError -= _discovery_DeviceError;
ThreadPool.QueueUserWorkItem(DisposeDiscovery, _discovery);
_discovery = null;
}
private void listViewDevices_MouseDoubleClick(object sender, MouseEventArgs e)
{
var items = listViewDevices.SelectedItems;
if (items.Count == 0)
return;
var lv = items[0];
var device = lv.Tag as CameraDeviceInfo;
if (device == null) return;
if (device.SelectedStreamingFormat == ImageFormat.Argb)
{
}
else
{
}
}
}
@endiverbatim
@ Start
Start trig detected.