RegistryState不在控制台应用程序上工作

时间:2014-01-24 13:52:40

标签: c# windows-ce

我已经在c#中为智能设备创建了一个Windows窗体应用程序,它将引发一个 只要注册表数据发生变化,就会发生事件。我已经使用了来自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有任何限制吗?

1 个答案:

答案 0 :(得分:0)

你必须使用Reflector深入研究它,但我强烈怀疑,ReegistryState类的深度与SHChangeNotifyRegister API类似。它使用Windows Messaging来指示状态更改,因此它必须有一个消息泵正在监视和分派这些消息,并且有一些地方在它们进入时发送它们。控制台应用程序没有消息泵,因此在消息时可能已经排队等待注册表已经更改,没有任何消息将该消息关闭并转发给您的RegistryState处理程序。

测试(和解决)很容易。只需向您的应用添加一个消息泵,它会定期执行常用的GetMessage / TranslateMessage / DispatchMessage。