2014-01-24 8 views
0

Я создал приложение Windows Form для смарт-устройства в C#, которое будет увеличивать событие всякий раз, когда происходят изменения в данных реестра. Я использовал RegistryState и следующий код с сайта msdn. Я могу успешно поднять это событие.RegistryState не работает с консольным приложением

RegistryState state; 
private void Form1_Load(object sender, EventArgs e) 
{ 
    // SystemState state; // This instance will go out of scope if defined here 

    RegistryState state = new RegistryState("HKEY_LOCAL_MACHINE\\MyKey", "MyValue"); 
    state.Changed += new ChangeEventHandler(state_Changed); 
} 

Но когда я использую тот же код и создаю консольное приложение, событие не запускается.

В чем может быть причина? Есть ли у RegistryState какие-либо ограничения?

ответ

0

Вам нужно будет использовать рефлектор, чтобы его копать, но мое сильное подозрение в том, что в его глубинах класс ReegistryState очень похож на API SHChangeNotifyRegister. Он использует Windows Messaging для изменения состояния сигнала, поэтому у него должен быть насос сообщений, который следит за этими сообщениями и отправляет их, и какое-то место для их отправки, когда они входят. В консольном приложении нет насоса сообщений, и поэтому, пока сообщение вероятно, будет поставлен в очередь, что реестр изменился, нет ничего, что вытащили бы это сообщение и переадресовали его на ваш обработчик RegistryState.

Было бы достаточно легко проверить (и поработать). Просто добавьте сообщение сообщения в свое приложение, которое периодически запускает GetMessage/TranslateMessage/DispatchMessage.

+0

Я думаю, что класс WindowsCE.Forms.MessageWindow будет выполнять 90% работы за вас. В MSDN есть пример: http://msdn.microsoft.com/en-us/library/microsoft.windowsce.forms.messagewindow(v=vs.85).aspx – PaulH

+0

Он не будет создавать насос сообщений. Application.Run делает это, и CF не имеет того, который не принимает форму, поэтому вам нужно обходиться. – ctacke

+0

Орехи. Ты прав. Ну, это гораздо менее полезно, чем я думал. – PaulH

Смежные вопросы