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.
Я вижу разные возможные решения:
не допускайте, чтобы устройство меняло состояние питания, и задайте PowerRequirement из кода: http://msdn.microsoft.com/en-us/library/ms920689.aspx
изменить время простоя батареи и (возможно, доступные) параметры питания для разных устройств. Вы можете установить PowerRequirement на "полное включение", но обработать период простоя из кода и уменьшить подсветку.
Измените реестр, чтобы установить состояние питания устройства, чтобы сетевое устройство не входило в режим ожидания, когда состояние питания системы переходит в состояние ожидания. Вы можете сопоставить состояния питания устройства с состояниями питания системы, используя реестр: http://msdn.microsoft.com/en-us/library/aa920052.aspx
Сделайте ваше приложение "осведомленным о состоянии питания системы" и закройте / снова откройте сокет, когда устройство приостановит / возобновит работу: http://msdn.microsoft.com/en-us/library/ms919833.aspx. Я использовал этот подход в последовательном порте к приложению клавиатуры.
см. также BatteryLog по адресу http://www.hjgode.de/wp/2013/12/07/windows-mobile-some-logging-tools/ чтобы получить представление о том, что делает система при изменении состояния питания.
там может быть больше решений...