Подскажите, как правильно отследить гибернацию?
Написал обработчик команд энкодера и резистивных кнопок. Получает данные от атмеги через ком-порт.
При выключение-включении компа все работает корректно.
При выходе из гибернации не видит порт. Пробовал через PowerModeChangedEventHandler.
Для отладки пишет лог в файл. Засыпание отрабатывается правильно, но при пробуждении не может открыть порт.
PHP код:
void OnPowerModeChanged(object sender, PowerModeChangedEventArgs 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("Ошибка имени порта", "Ошибка");
}
}