// Manage power events to switch on or off teh components private void PowerEventHandler(object sender, PowerModeChangedEventArgs e) { switch (e.Mode) { // Resuming the system case PowerModes.Resume: Log.Information("Hello again. I'm back to life!"); // If we have a Tv, try to power it on. Report if it fails. try { SamsungTv?.PowerOn(); } catch (CecException err) { Log.Error("Powering on TV set failed", err); } // If we have an Avr, try to power it on. Report if it fails. try { PioneerAvr?.PowerOnAsync(); } catch (AvrException err) { Log.Error("Powering on AVR failed", err); } break; // Suspending the system case PowerModes.Suspend: Log.Information("Have a good night. I'm falling asleep... "); // If we have a Tv, try to power it off. Report if it fails. try { SamsungTv?.PowerOff(); } catch (CecException err) { Log.Error("Powering off TV set failed", err); } // If we have an Avr, try to power it off. Report if it fails. try { PioneerAvr?.PowerOffAsync(); } catch (AvrException err) { Log.Error("Powering off AVR failed", err); } break; // Nothing to do case PowerModes.StatusChange: break; } }
/// <summary> /// Dispose managed and unmanaged resources /// </summary> /// <param name="disposing">True to dispose managed resources</param> protected virtual void Dispose(bool disposing) { if (!disposedValue) { if (disposing) { SamsungTv?.Dispose(); PioneerAvr?.Dispose(); apiServer?.Dispose(); notifyIcon?.Dispose(); Log.CloseAndFlush(); // Because SystemEvents.PowerModeChanged Event is a static event, // you must detach your event handlers when your application is disposed, or memory leaks will result. SystemEvents.PowerModeChanged -= PowerEventHandler; catspawInstance?.Dispose(); } disposedValue = true; } }