我正在編寫一個應用程序(PocketPc 2003上的.NET Compact Framework 3.5) 我試圖檢測到搖籃事件,它被檢測到但非常不穩定。例如,在每次檢測時while循環運行兩次。 這是因爲多次註冊到ActiveSyncEnd事件? 我該如何糾正?誘捕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");
}
}