// CONSTRUTOR public DeviceMonitorSignaling() { CancelToken = new RulyCanceler(); searchingHandle = new AutoResetEvent(false); monitoringHandle = new AutoResetEvent(false); _monitoringThread = new Thread (() => { try { MonitorDeviceConnection(CancelToken); } catch (OperationCanceledException) { Console.WriteLine("Canceled Search!"); } }); _searchDeviceThread = new Thread(() => { try { SearchDevices(CancelToken); } catch (OperationCanceledException) { Console.WriteLine("Canceled Monitor!"); } }); _monitoringThread.IsBackground = true; }
/// <summary> /// Once the device is detected /// </summary> /// <param name="cancelToken"></param> void MonitorDeviceConnection(RulyCanceler cancelToken) { monitoringHandle.WaitOne(); Console.WriteLine("monitoring started."); while (_monitoring) { cancelToken.ThrowIfCancellationRequested(); Thread.Sleep(1000); if (device == null) { Console.WriteLine("Disconnected Invoking search."); // Block monitoring thread and awake the device search. ToggleMonitoringMode(); } else { bool responding = device.isConnected; Console.WriteLine("responding {0}", responding); if (!responding) { Console.WriteLine("Not responding. Invoking search."); device = null; // Block monitoring thread and awake the device search. ToggleMonitoringMode(); } } } }
static void Work (RulyCanceler c) { while (true) { c.ThrowIfCancellationRequested(); // ... try { OtherMethod (c); } finally { /* any required cleanup */ } } }
static void Work(RulyCanceler c) { while (true) { c.ThrowIfCancellationRequested(); // ... try { OtherMethod(c); } finally { /* any required cleanup */ } } }
static void Main() { var canceler = new RulyCanceler(); new Thread (() => { try { Work (canceler); } catch (OperationCanceledException) { Console.WriteLine ("Canceled!"); } }).Start(); Thread.Sleep (1000); canceler.Cancel(); // Safely cancel worker. }
static void Main() { var canceler = new RulyCanceler(); new Thread(() => { try { Work(canceler); } catch (OperationCanceledException) { Console.WriteLine("Canceled!"); } }).Start(); Thread.Sleep(1000); canceler.Cancel(); // Safely cancel worker. }
/// <summary> /// Method to search the device. /// </summary> /// <param name="cancelToken"></param> void SearchDevices(RulyCanceler cancelToken) { while (_running) { cancelToken.ThrowIfCancellationRequested(); Console.WriteLine("Searching devices...."); Thread.Sleep(1000); device = new Device(); // may be some logic to detect the device. Console.WriteLine("Finished!!! Searching devices. Start monitoring."); if (device != null) { // Block the search thread and start the monitoring thread. ToggleMonitoringMode(); } } }
static void OtherMethod (RulyCanceler c) { // Do stuff... c.ThrowIfCancellationRequested(); }
static void OtherMethod(RulyCanceler c) { // Do stuff... c.ThrowIfCancellationRequested(); }