保持Windows Mobile Console应用程序运行

时间:2009-08-07 16:22:37

标签: c# windows-mobile compact-framework console

我有一个看起来像这样的Windows移动应用程序:

class Program
{
    static void Main(string[] args)
    {
        RunHook runHook = new RunHook();

    }
}

class RunHook
{
    private HookKeys hook;
    public RunHook()
    {
        hook = new HookKeys();
        hook.HookEvent += EventForHook;
    }

    private void EventForHook(HookEventArgs e, KeyBoardInfo keyBoardInfo, 
      ref Boolean handled)
    {
        if ((keyBoardInfo.scanCode == 4) && (keyBoardInfo.vkCode == 114))
            handled = true;
    }
}

它会在键盘上创建一个钩子(我知道有些人不赞成)。我的问题是我需要Main方法永不返回。这将在我公司拥有的设备上运行,我们正在使用它来禁用手机硬件密钥。

这看起来应该很简单,但我坚持下去。

在普通的.NET上我只会调用Console.Readline(),但这在Windows Mobile Compact Framework上不起作用。我也尝试了Thread.Sleep(0),但它也不起作用。

感谢您的反馈。

3 个答案:

答案 0 :(得分:4)

Thread.Sleep(0)睡眠时间为零毫秒。

您可能想要Thread.Sleep(Timeout.Infinite)

您也可以考虑创建EventWaitHandle

class Program
{
    static public ManualResetEvent StopMain;

    static void Main(string[] args)
    {
        StopMain = new ManualResetEvent(false);
        RunHook runHook = new RunHook();
        StopMain.WaitOne();  // waits until signalled
    }
}

然后,如果你准备退出Main(),你可以调用(来自另一个线程):

Program.StopMain.Set();

答案 1 :(得分:0)

如果它将在贵公司拥有的设备上运行,那么为什么不在后台运行一个小的Windows程序。我的意思是隐藏窗户。让它坐在你的任务栏中。 Click on this link for more information on use of notification icon in CF.

答案 2 :(得分:0)

不确定这会有所帮助,但使用您调用的本机代码

LRESULT CallNextHookEx(
    HHOOK hhk,
    int nCode,
    WPARAM wParam,
    LPARAM lParam
);

在你的处理程序中执行默认的处理行为,还没有测试过这个,但我想如果你调用链中的下一个处理程序,什么都不会发生

更多信息: http://msdn.microsoft.com/en-us/library/ms644974%28VS.85%29.aspx 。 该链接包含一些可能有帮助的托管代码示例

HTH