Подскажите, как правильно отследить гибернацию?
Написал обработчик команд энкодера и резистивных кнопок. Получает данные от атмеги через ком-порт.
При выключение-включении компа все работает корректно.
При выходе из гибернации не видит порт. Пробовал через PowerModeChangedEventHandler.
Для отладки пишет лог в файл. Засыпание отрабатывается правильно, но при пробуждении не может открыть порт.
PHP код:
void OnPowerModeChanged(object senderPowerModeChangedEventArgs e)
        {
            
string logpath Application.StartupPath + @"\powerlogger.txt";

            if (
File.Exists(logpath))
            {
                
FileInfo f = new FileInfo(logpath);
                
long s1 f.Length;

                if (
s1 10485760)
                {
                    
System.IO.File.Delete(logpath);
                }
            }
            if (!
File.Exists(logpath))
            {
                
using (StreamWriter sw File.CreateText(logpath))
                {
                    
sw.WriteLine("Powermodelogger:");
                }
            }

            if (
e.Mode == PowerModes.Suspend)
            {
                
using (StreamWriter sw File.AppendText(logpath))
                {
                    
sw.WriteLine("Засыпаем:" DateTime.Now.ToString());
                }
                if(
serialPort1.IsOpen)
                {
                    
serialPort1.DiscardOutBuffer();
                    
serialPort1.DiscardInBuffer();
                    
serialPort1.Close();
                    if(!
serialPort1.IsOpen)
                    {
                        
using (StreamWriter sw File.AppendText(logpath))
                        {
                            
sw.WriteLine("Порт " comname.ToString() + " закрыт");
                        }
                    }
                }
                
            }

            if(
e.Mode == PowerModes.Resume)
            {
                
using (StreamWriter sw File.AppendText(logpath))
                {
                    
sw.WriteLine("Просыпаемся:" DateTime.Now.ToString());
                }
                
open_port(comname);
                if (
serialPort1.IsOpen)
                {
                    
using (StreamWriter sw File.AppendText(logpath))
                    {
                        
sw.WriteLine("Порт "+comname.ToString()+" открыт");
                    }
                }
                
            }
        }

        private 
void open_port(string name)
        {
            if (
comname != null)
            {
                try
                {
                    if (!
serialPort1.IsOpen)
                    {
                        
serialPort1.PortName name;
                        
serialPort1.Open();
                    }
                }
                catch
                {
                    
MessageBox.Show("Ошибка порта""Ошибка");
                }
            }
            else
            {
                
MessageBox.Show("Ошибка имени порта""Ошибка");
            }
        }