End Google Ads 201810 - BS.net 01 --> I have background threads that are doing things and based on logging when the computer goes to sleep, the threads cause the application to hang because of timing I would assume. I would like to abort the threads when the machine goes to sleep and bring them back when it wakes up, or something else if there is another way?

I tried inserting the code below yesterday, but I did not see any messageboxes below when I came in this morning and the application was hung again. This is my first time encountering power management issues, so I'm new to this override code.

Thanks for reading.


protected override void WndProc(ref Message m) { switch (m.Msg) { case WM_POWERBROADCAST: switch (m.WParam.ToInt32()) { //value passed when system is going on standby / suspended case PBT_APMQUERYSUSPEND: if (reminderThread.IsAlive == true) { reminderThreadTerminate = true; MessageBox.Show("reminderThreadTerminate set to true"); } //List arr = // Properties.Settings.Default.StandDownApps.Split(',').ToList(); //foreach (string item in arr) //{ // foreach (Process p in // System.Diagnostics.Process.GetProcessesByName(item)) // { // try // { // //Exiting the applications when going into standby // p.Kill(); // p.WaitForExit(3600000); // 1 min timeout // } // catch // { // // process was terminating or can't be terminated // } // } //} break; //value passed when system is resumed after suspension. case PBT_APMRESUMESUSPEND: if (reminderThread.IsAlive == false) { reminderThread.Start(); MessageBox.Show("reminderThreadTerminate started"); } else if (reminderThread.IsAlive == true) { reminderThreadTerminate = true; Thread.Sleep(2000); reminderThread.Start(); MessageBox.Show("reminderThreadTerminate was still running, it was killed and then restarted"); } //arr = Properties.Settings.Default.StandUpApps.Split(',').ToList(); //foreach (string item in arr) //{ // //Starting the applications when coming up from standby // System.Diagnostics.Process.Start(item); //} break; //value passed when system Suspend Failed case (PBT_APMQUERYSUSPENDFAILED): //value passed when system is suspended case (PBT_APMSUSPEND): //value passed when system is resumed automatically case (PBT_APMRESUMEAUTOMATIC): //value passed when system is resumed from critical //suspension possibly due to battery failure case (PBT_APMRESUMECRITICAL): //value passed when system is low on battery case (PBT_APMBATTERYLOW): //value passed when system power status changed //from battery to AC power or vice-a-versa case (PBT_APMPOWERSTATUSCHANGE): //value passed when OEM Event is fired. Not sure what that is?? case (PBT_APMOEMEVENT): break; } break; default: break; } base.WndProc(ref m); }