У меня есть метод Main, который создает цикл сообщений с именем SysTrayApp:
void Main()
{
Application.Run(new SysTrayApp());
}
Мой класс SysTrayApp добавляет ContextMenu к значку на панели задач, а затем запускает другой цикл сообщений под названием MouseHook
. MouseHook - это класс, который определяет события мыши. (По модели это класс.)
class SysTrayApp : Form
{
public SysTrayApp()
{
// Does some GUI work
// Then starts another message loop
Application.Run(new MouseHook());
}
}
_
class MouseHook : Form
{
public MouseHook()
{
// Does some hooking stuff
}
}
В SysTrayApp, Application.Exit()
вызывается, когда пользователь выбирает опцию Выход из контекстного меню. Проблема в том, что мне нужно дважды вызвать Exit (или добавить еще Application.Exit
) для завершения приложения. Это ожидается, но
Я чувствую, что поступаю неправильно. Вызов Application.Exit()
дважды мне кажется неправильным, но я новичок в мире C #. Должны ли SysTrayApp
и MouseHook
быть объединены в один большой класс? MouseHook
не похоже, что это должно быть отдельно от Windows.Form либо. Может быть MouseHook
должен быть в новой теме? Есть предложения?
РЕДАКТИРОВАТЬ: Упс. MouseHook
не было третьего Application.Run()
Решение
Полагаю, я обдумал это. Все еще изучаю C #, как я уже сказал. Но вот что работает:
Application.Run(new SysTrayApp());
в Main()
- это все, что вам нужно. Чтобы начать MouseHook
, просто сделайте MouseHook hook = new MouseHook();
в SysTrayApp
.
Спасибо @JonSkeet за помощь в понимании этого. Вы машина!