我正在编写一个应用程序(PocketPc 2003 上的 .NET Compact Framework 3.5)我正在尝试检测 cradle 事件,该事件已被检测到但非常不稳定。例如,在每次检测时,while 循环都会运行两次。这是因为 ActiveSyncEnd 事件的多次注册吗?我该如何纠正?
///NOTIFICATION_EVENT_NONE = 0,
///NOTIFICATION_EVENT_TIME_CHANGE = 1,
///NOTIFICATION_EVENT_SYNC_END = 2,
///NOTIFICATION_EVENT_ON_AC_POWER = 3,
///NOTIFICATION_EVENT_OFF_AC_POWER = 4,
///NOTIFICATION_EVENT_NET_CONNECT = 5,
///NOTIFICATION_EVENT_NET_DISCONNECT = 6,
///NOTIFICATION_EVENT_DEVICE_CHANGE = 7,
///NOTIFICATION_EVENT_IR_DISCOVERED = 8,
///NOTIFICATION_EVENT_RS232_DETECTED = 9,
///NOTIFICATION_EVENT_RESTORE_END = 10,
///NOTIFICATION_EVENT_WAKEUP = 11,
///NOTIFICATION_EVENT_TZ_CHANGE = 12,
///NOTIFICATION_EVENT_MACHINE_NAME_CHANGE = 13
// In DeviceEventManager
public void ActiveSyncEndDetect()
{
try
{
// Put 9 for cradle event, 2 for ActiveSyncEnd event, 0 for none.
handleActiveSyncEndEvent = NativeMethods.CreateEvent(IntPtr.Zero, false, false, "EventActiveSync");
while (!terminateDeviceEventThreads)
{
//NativeMethods.CeRunAppAtEvent("\\\\.\\Notifications\\NamedEvents\\EventActiveSync", 2);
//NativeMethods.CeRunAppAtEvent("\\\\.\\Notifications\\NamedEvents\\EventActiveSync", 9);
NativeMethods.CeRunAppAtEvent("\\\\.\\Notifications\\NamedEvents\\EventActiveSync", 2);
NativeMethods.WaitForSingleObject(handleActiveSyncEndEvent, 0xFFFFFFFF);
//MessageBox.Show("Activesync ended.");
//Do something here
NativeMethods.CeRunAppAtEvent("\\\\.\\Notifications\\NamedEvents\\EventActiveSync", 0);
}
}
catch (Exception e)
{
System.Windows.Forms.MessageBox.Show("Exception in ActiveSyncEndDetect method");
}
}