/// <summary> /// Start the device in the current thread. Should be used by implementations of the <see cref="DeviceRunner.Start"/> method. /// </summary> /// <remarks> /// Initializes the sockets prior to starting the device with <see cref="Initialize"/>. /// </remarks> protected internal void Run() { EnsureNotDisposed(); Initialize(); FrontendSocket.ReceiveReady += (sender, args) => FrontendHandler(args); BackendSocket.ReceiveReady += (sender, args) => BackendHandler(args); DoneEvent.Reset(); IsRunning = true; _poller.ClearSockets(); _poller.AddSockets(new[] { FrontendSocket, BackendSocket }); TimeSpan timeout = TimeSpan.FromMilliseconds(PollingIntervalMsec); try { while (IsRunning) { _poller.Poll(timeout); } } catch (ZmqException) { // Swallow any exceptions thrown while stopping if (IsRunning) { throw; } } IsRunning = false; DoneEvent.Set(); }