我已经在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有任何限制吗?
答案 0 :(得分:0)
你必须使用Reflector深入研究它,但我强烈怀疑,ReegistryState
类的深度与SHChangeNotifyRegister
API类似。它使用Windows Messaging来指示状态更改,因此它必须有一个消息泵正在监视和分派这些消息,并且有一些地方在它们进入时发送它们。控制台应用程序没有消息泵,因此在消息时可能已经排队等待注册表已经更改,没有任何消息将该消息关闭并转发给您的RegistryState
处理程序。
测试(和解决)很容易。只需向您的应用添加一个消息泵,它会定期执行常用的GetMessage / TranslateMessage / DispatchMessage。