gpt4 book ai didi

c# - WIN CE 5.0 ActiveSync 连接/断开?

转载 作者:行者123 更新时间:2023-11-30 15:07:49 25 4
gpt4 key购买 nike

我必须将某些软件从 Windows Mobile 6.5 反向移植到 Windows CE 5.0,该软件当前会检测设备何时位于基本设备中(ActiveSync 正在运行)。

我需要知道 ActiveSync 何时在设备上运行,以便我可以准备设备发送和接收文件。

我找到了一篇关于使用 PINVOKE 方法(例如 CeRunAppAtEvent)的文章,但我对它的工作原理一无所知。

    bool terminateDeviceEventThreads = false;
IntPtr handleActiveSyncEndEvent;

while (!terminateDeviceEventThreads)
{
handleActiveSyncEndEvent = NativeMethods.CreateEvent (IntPtr.Zero,
true, false, "EventActiveSync");
if (IntPtr.Zero != handleActiveSyncEndEvent)
{
if (NativeMethods.CeRunAppAtEvent ("\\\\.\\Notifications\\NamedEvents\\EventActiveSync",
(int) NOTIFICATION_EVENT.NOTIFICATION_EVENT_RS232_DETECTED))
{
NativeMethods.WaitForSingleObject (handleActiveSyncEndEvent, 0);

//

NativeMethods.ResetEvent (handleActiveSyncEndEvent);
if (!NativeMethods.CeRunAppAtEvent ("\\\\.\\Notifications\\NamedEvents\\EventActiveSync",
(int) NOTIFICATION_EVENT.NOTIFICATION_EVENT_NONE))
{
break;
}
handleActiveSyncEndEvent = IntPtr.Zero;
}
}
}

最佳答案

您在此处的代码正在等待系统通知 NOTIFICATION_EVENT_RS232_DETECTED。通过使用 CeRunAppAtEvent(有点用词不当,因为它不会运行应用程序而是设置事件),他们注册了一个名为“EventActiveSync”的命名系统事件,以便在通知发生时设置。

本质上,当设备插接时,命名的系统事件将被设置。

您的代码中有一些等待代码,但不完整 - 它调用 WaitForSingleObject,但从不查看结果然后取消事件。我认为它看起来更像这样

event EventHandler OnConnect = delegate{};

void ListenerThreadProc()
{
var eventName = "OnConnect";

// create an event to wait on
IntPtr @event = NativeMethods.CreateEvent (IntPtr.Zero, true, false, eventName);

// register for the notification
NativeMethods.CeRunAppAtEvent (
string.Format("\\\\.\\Notifications\\NamedEvents\\{0}", eventName),
(int) NOTIFICATION_EVENT.NOTIFICATION_EVENT_RS232_DETECTED);

while(!m_shutdown)
{
// wait for the event to be set
// use a 1s timeout so we don't prevent thread shutdown
if(NativeMethods.WaitForSingleObject(@event, 1000) == 0)
{
// raise an event
OnConnect(this, EventArgs.Empty);
}
}

// unregister the notification
NativeMethods.CeRunAppAtEvent (
string.Format("\\\\.\\Notifications\\NamedEvents\\{0}", eventName),
(int) NOTIFICATION_EVENT.NOTIFICATION_EVENT_NONE);

// clean up the event handle
NativeMethods.CloseHandle(@event);
}

您的应用程序将创建一个在启动时使用此过程的线程,并为 OnConnect 事件连接一个事件处理程序。

FWIW,SDF 有这个 already done , 所以在你的代码中会是这样的:

DeviceManagement.SerialDeviceDetected += DeviceConnected;
...
void DeviceConnected()
{
// handle connection
}

关于c# - WIN CE 5.0 ActiveSync 连接/断开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6227805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com