Поддерживайте работоспособность консольного приложения Windows Mobile

2

У меня есть мобильное приложение для 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), но он тоже не работает.

Спасибо за любую обратную связь.

Теги:
console
compact-framework
windows-mobile

3 ответа

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();
  • 0
    ОТЛИЧНЫЙ ответ !!! Спасибо!
0

не уверен, что это поможет, но с помощью собственного кода youd call

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

в вашем обработчике для выполнения поведения обработки по умолчанию, havent проверил это, но я думаю, что если вы не назовете следующего обработчика в цепочке, ничего не произойдет

Дополнительная информация: http://msdn.microsoft.com/en-us/library/ms644974%28VS.85%29.aspx , ссылка содержит некоторые примеры управляемых кодов, которые могут помочь

HTH

0

Если он будет запущен на устройствах, принадлежащих вашей компании, то почему бы не запустить небольшую оконную программу в фоновом режиме. Я имею в виду просто скрыть окно. Пусть он сидит в вашей панели задач. Нажмите на эту ссылку для получения дополнительной информации об использовании значка уведомлений в CF.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню