Поддерживайте работоспособность консольного приложения Windows Mobile - PullRequest
2 голосов
/ 07 августа 2009

У меня есть приложение для Windows Mobile, которое выглядит так:

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 ]

4 голосов
/ 07 августа 2009

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 голосов
/ 27 августа 2009

не уверен, что это поможет, но с нативным кодом youd call

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

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

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

НТН

0 голосов
/ 07 августа 2009

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

...