标签: pocketpc

在PocketPC上运行后台服务

我最近给自己买了一部新手机,运行Windows Mobile 6.1 Professional.当然,我目前正在考虑做一些编码,基于业余爱好.我的计划是将服务作为DLL运行,由Services.exe加载.这需要收集som数据,并定期(每5-10分钟)进行一次som处理.

由于我需要定期运行,因此对我来说这是一个问题,系统通常会在用户短暂不活动后进入休眠状态(暂停).

我一直在阅读我在MSDN上找到的所有文档,以及有关此主题的MSDN博客,在我看来,这个问题有三种可能的解决方案:

  1. 通过定期调用SystemIdleTimerReset将系统保持在"Always On"状态.这似乎有点过分,因此是不可能的.

  2. 让系统定期用CeRunAppAtTime唤醒,并进入无人值守状态,进行处理.

  3. 使用无人参与状态而不是进入完全暂停状态.这对用户来说是透明的,但系统永远不会进入睡眠状态.

第二种方法似乎是首选,但是,这需要系统在唤醒时调用可执行文件,唯一的任务是通知我的服务它应该开始处理.这似乎有点不必要,我想避免这个额外的可执行文件.我当然可以将我的所有处理都移到这个额外的可执行文件中,但我想使用在作为服务运行时提供的一些功能,并且在处理开始时也没有弹出程序(即使它在后台).

乍一看,第三种方法似乎与第一种方法具有相同的基本问题.但是,我已经阅读了一些MSDN博客,可能通过这种方法实际节省电池消耗,而不是经常进入和退出挂起模式(对此的论点是WM平台的性质是当系统处于空闲状态时,电池消耗非常少.进出暂停需要相当多的处理.

所以我想我的问题如下:

  • 在我的情况下,你会推荐哪种方法?关于保持最低电池消耗,以及良好的清洁实施.

  • 在第二种方法的情况下,是否可以消除对通知可执行文件的需求?通过替代API函数或平台上现有的通用应用程序?

  • 在第三种方法的情况下,您是否知道与索赔相关的任何信息/统计数据,在使用无人值守模式进入暂停状态时可以延长电池寿命.例如,在首选无人值守模式之前,您需要多长时间将系统拉出挂起状态.

  • 具体实施(奖金)问题:是否有必要定期调用SystemIdleTimerReset以保持无人值守模式?

最后,如果您认为我过早地排除了第一种方法,请告诉我原因.


请在您的回复中包括您的回答是基于知识,还是仅仅是猜测(后者也非常受欢迎!).

如果您认为我需要澄清此问题的任何部分,请发表评论.

c++ winapi pocketpc windows-mobile

5
推荐指数
1
解决办法
1431
查看次数

5
推荐指数
1
解决办法
744
查看次数

PocketPC Windows CE上的C#扩展方法

CE框架上是否也提供了扩展方法?我有一个字符串的扩展方法,在Windows窗体项目中工作正常,但它不会在PocketPC应用程序中构建.

我认为这很容易找到,但我无法在PocketPC上找到有关扩展方法的任何信息.

编辑:哎呀这是我的错误.我在Visual Studio 2008中编写了扩展方法,但PocketPC项目是在Visual Studio 2005中编译的,我没有意识到.那是我生命中的一小时,我永远不会回来.无论如何,谢谢大家的答案.

c# extension-methods pocketpc compact-framework

5
推荐指数
1
解决办法
1512
查看次数

按下通讯座时,窗口中无法识别设备模拟器

谁可以帮助我:我正在使用VS.net 2008在Win7 x64上工作.我正在为pocketpc开发.

当我的应用程序部署到设备模拟器时,它无法连接到我的计算机/数据库服务器.仿真器和移动设备中心都配置为使用DMA.当我使用设备管理器托住设备时,没有任何反应.

我该怎么办?

pocketpc device-emulation visual-studio-2008 windows-7-x64

5
推荐指数
1
解决办法
4476
查看次数

数据库引擎比较 - Windows Mobile

Windows Mobile上有哪些不同的数据库选项?我使用CEDB和EDB来满足线性数据集的需求.

我听说过SQL server 2005 Mobile版.但与其他人相比有什么优势(如果有的话)

sql-server pocketpc sql-server-mobile windows-mobile

4
推荐指数
2
解决办法
680
查看次数

编辑注册表值

我想更改pocketPC上的注册表值.我运行了以下代码:

if(enabled)
{
    dwData = 120;
}
if(RegSetValueEx(HKEY_LOCAL_MACHINE, _T("System\\CurrentControlSet\\Control\\Power\\Timeouts\\BattSuspendTimeout"), 0, REG_DWORD, (LPBYTE)&dwData, sizeof(DWORD)))
{
    return FALSE;
}
Run Code Online (Sandbox Code Playgroud)

但它不会改变注册表项.有谁知道如何用c ++设置注册表键值?

谢谢!

c++ registry pocketpc windows-mobile

2
推荐指数
1
解决办法
6657
查看次数

为什么VS2005会寻找它应该生成的文件?

我正在使用Visual Studio 2005中的PocketPC应用程序.解决方案正在构建正常,然后突然崩溃.第一个错误就是这个(假设项目是FooPDA):

"无法找到位于'%InstallDir%'中的文件'FooPDA.exe'的源文件'C:\ FooPDA\obj\Release\FooPDA.exe',该文件可能不存在或被锁定."

这个错误对我来说相当混乱.它正在寻找它应该生成的文件.任何人都知道这里可能出了什么问题?


编辑:项目在版本控制之外构建正常,我只需更改项目上的图标,它就会开始抛出这个神秘的错误.

.net pocketpc visual-studio-2005

2
推荐指数
1
解决办法
3436
查看次数

如何在.Net 3.5中获得Enum.GetValues?

在.Net 4.0中,我System.Enum.GetValues(typeof(Gender))用来获取枚举项列表.
在一个完整的例子中,我用这种方式查找枚举值:

    Gender retVal = Gender.Male;

    foreach (Gender enumType in System.Enum.GetValues(typeof(Gender)))
    {
        if (enumType.ToString().Trim().ToUpper().Substring(0,1).Equals(stringToEnum.Trim().ToUpper()))
        {
            retVal = enumType;
            break;
        }
    }  
Run Code Online (Sandbox Code Playgroud)

但我怎么能在.Net 3.5(掌上电脑)中这样做?
提前致谢 !

我使用下面的答案,但它对我不起作用.这是代码:

枚举值:

namespace Ionic.Zlib
{
    public enum CompressionLevel
    {
        Level0 = 0,
        None = 0,
        Level1 = 1,
        BestSpeed = 1,
        Level2 = 2,
        Level3 = 3,
        Level4 = 4,
        Level5 = 5,
        Level6 = 6,
        Default = 6,
        Level7 = 7,
        Level8 = 8,
        BestCompression = 9,
        Level9 = 9,
    } …
Run Code Online (Sandbox Code Playgroud)

.net c# pocketpc

2
推荐指数
1
解决办法
4379
查看次数

从小数中获取最后一位数字

我有个问题.在我的情况下,我想检索十进制值的最后一位数,以进行舍入调整.以下是我的代码:

private void calculateADJ()
    {
        string result = Strings.Right(txtGTotal.Text, 1);
        if (result == "1" || result == "6")
        {
            txtStoreRA.Text = "-0.01";
            txtOutstanding.Text = (Convert.ToDouble(txtGTotal.Text) - 0.01).ToString("0.00");
        }

        if (result == "2" || result == "7")
        {
            txtStoreRA.Text = "-0.02";
            txtOutstanding.Text = (Convert.ToDouble(txtGTotal.Text) - 0.02).ToString("0.00");
        }
        if (result == "3" || result == "8")
        {
            txtStoreRA.Text = "0.01";
            txtOutstanding.Text = (Convert.ToDouble(txtGTotal.Text) + 0.01).ToString("0.00");
        }

        if (result == "4" || result == "9")
        {
            txtStoreRA.Text = "0.02";
            txtOutstanding.Text = (Convert.ToDouble(txtGTotal.Text) + …
Run Code Online (Sandbox Code Playgroud)

c# pocketpc visual-studio-2005

-1
推荐指数
1
解决办法
1163
查看次数