Windows Mobile 6.5 подсветка отключает сокет

Я разрабатываю мобильное приложение для Windows 6.5 для склада. Я подключаюсь к серверу через TCP, и все работает нормально, пока не погаснет подсветка.
Даже когда я ничего не отправляю, генерируется исключение socket.IO (клиентская сторона прерывает соединение), и мое серверное приложение удаляет клиента из пула.

Мой проект требует обработки клиентов, которые подключаются в течение длительных периодов времени (обычно 8 рабочих часов). Есть ли способ обнаружить это событие?
Я использую формы C# windows и.net 3.5

(Я только что вспомнил про свойство this.LostFocus, но оно не работает должным образом).

@РЕДАКТИРОВАТЬ

В конце концов я решил это, утилизировав розетку и снова подключившись. Если кому-то понадобится обнаружить это, просто сделайте это: (не самый чистый, но работает)

try
 {
// let it crash
 sthfailed = pollfailed = Form1.clientSocket.Client.Poll(10, SelectMode.SelectError);
}
catch (SocketException u)
                {
                    progress++;}
try
{    //this is the easiest way, let it crash n detect it
     if (Form1.clientSocket.Client.Available == 0)
                        ;
}
catch (Exception h)
{ progress++; }   //if both 'try' blocks have failed its probably due to power state

и подтверждение с помощью переменной bool, установленной при изменении состояния

OpenNETCF.WindowsCE.PowerManagement.PowerDown += new DeviceNotification(PowerManagement_PowerDown);

1 ответ

Решение

Эти мобильные устройства пытаются сэкономить энергию, чтобы продлить срок службы батареи. Существуют разные PowerStates от "полного включения" до "полного отключения" ( http://msdn.microsoft.com/en-us/library/aa932261.aspx и http://msdn.microsoft.com/en-us/library/aa930499.aspx). OEM-производитель может определить, какие устройства будут включены в PowerState.

Я вижу разные возможные решения:

  1. не допускайте, чтобы устройство меняло состояние питания, и задайте PowerRequirement из кода: http://msdn.microsoft.com/en-us/library/ms920689.aspx

  2. изменить время простоя батареи и (возможно, доступные) параметры питания для разных устройств. Вы можете установить PowerRequirement на "полное включение", но обработать период простоя из кода и уменьшить подсветку.

  3. Измените реестр, чтобы установить состояние питания устройства, чтобы сетевое устройство не входило в режим ожидания, когда состояние питания системы переходит в состояние ожидания. Вы можете сопоставить состояния питания устройства с состояниями питания системы, используя реестр: http://msdn.microsoft.com/en-us/library/aa920052.aspx

  4. Сделайте ваше приложение "осведомленным о состоянии питания системы" и закройте / снова откройте сокет, когда устройство приостановит / возобновит работу: http://msdn.microsoft.com/en-us/library/ms919833.aspx. Я использовал этот подход в последовательном порте к приложению клавиатуры.

см. также BatteryLog по адресу http://www.hjgode.de/wp/2013/12/07/windows-mobile-some-logging-tools/ чтобы получить представление о том, что делает система при изменении состояния питания.

там может быть больше решений...

Другие вопросы по тегам