我有一个看起来像这样的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)
,但它也不起作用。
感谢您的反馈。
答案 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