我正在为仓库开发一个Windows 6.5移动应用程序。我通过TCP连接到服务器,一切正常,直到背光关闭。
即使我没有发送任何内容,也会抛出socket.IO异常(客户端中止连接),我的服务器应用程序会从池中删除客户端。
我的项目需要处理长时间连接的客户端(通常为8个工作小时)。有没有办法检测到这个事件?
我正在使用c#windows窗体和.net 3.5
(我只记得this.LostFocus属性,但它没有按预期工作)。
@EDIT
最后,我通过处理插座并重新连接来解决它。如果有人需要检测它,那就这样做:(不是最干净,但有效)
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
并在powerstate更改时使用bool变量进行确认
OpenNETCF.WindowsCE.PowerManagement.PowerDown += new DeviceNotification(PowerManagement_PowerDown);
答案 0 :(得分:0)
这些移动设备试图节省电力以延长电池寿命。有不同的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。我在串口使用这种方法进行键盘楔形应用。
另见http://www.hjgode.de/wp/2013/12/07/windows-mobile-some-logging-tools/的BatteryLog,了解系统在更改电源状态时的作用。
可能还有更多解决方案......