/// <summary>Signals the acquisition thread to stop and waits asynchronously for actual stop</summary> void StopAcquisition() { if (cancellationTokenSource != null) { cancellationTokenSource.Cancel(); } DeviceHandle = null; if (acquisitionThread != null) { acquisitionThread.Join(); } cancellationTokenSource = null; Device = null; acquisitionThread = null; }
static bool FindFirstAvailableDevice(out GigEVision_DeviceDescriptor device) { var devices = new List <GigEVision_DeviceDescriptor>(); device = null; GenICam.GigEVision_FindDevices(800, 1, devices); if (devices == null || !devices.Any()) { return(false); } device = devices.First(); Console.WriteLine(string.Format("{0} {1} [{2}]", device.ManufacturerName, device.ModelName, device.IpAddress)); return(true); }
/// <summary>Connects to the first available GigEVision camera device and runs the acquisition thread.</summary> void StartAcquisition() { connectionStatusLabel.Text = "Connecting..."; Device = FindFirstAvailableDevice(); if (Device == null) { connectionStatusLabel.Text = "Disconnected"; throw new Exception("Couldn't find any GigEVision camera device"); } DeviceHandle = GenICam.GigEVision_OpenDevice(Device.IpAddress); GenICam.GigEVision_StartAcquisition(DeviceHandle.Value, string.Empty, 1); acquisitionThread = new Thread(AcquisitionThread); cancellationTokenSource = new CancellationTokenSource(); acquisitionThread.Start(); }
static void RunAcquisition(GigEVision_DeviceDescriptor device) { var handle = GenICam.GigEVision_OpenDevice(device.IpAddress); try { SetupDevice(handle); } catch (Exception e) { ResetDeviceSetup(handle); Console.Error.WriteLine("Cannot setup camera device. Device may not be compatible with this demo."); Console.Error.WriteLine(e.Message); GenICam.GigEVision_CloseHandle(handle); return; } Console.WriteLine("Starting acquisition, close any preview window to stop..."); // Start acquisition. That will init video stream and activate device, but frames will not be captured until triggered by software command. GenICam.GigEVision_StartAcquisition(handle, string.Empty, 1); DebugPreviewWindowState window1 = new DebugPreviewWindowState(); DebugPreviewWindowState window2 = new DebugPreviewWindowState(); int captureErrors = 0; try { using (Image frameBuffer1 = new Image(), frameBuffer2 = new Image()) { while (true) { if (!CaptureFramesPair(handle, 8000, 55000, frameBuffer1, frameBuffer2)) { // Failed to receive frames. if (++captureErrors >= 3) { // Three capture errors in row throw new TimeoutException("Unable to capture frames."); } else { // Try again from beginning. continue; } } captureErrors = 0; if (!AVL.DebugPreviewShowImage(window1, frameBuffer1) || !AVL.DebugPreviewShowImage(window2, frameBuffer2)) { break; } } } } finally { ResetDeviceSetup(handle); GenICam.GigEVision_CloseHandle(handle); } }