gpt4 book ai didi

c# - Windows Mobile 存储卡问题

转载 作者:行者123 更新时间:2023-11-30 01:32:35 32 4
gpt4 key购买 nike

我正在制作 Windows 移动应用程序,它引用了一些 DLL,但我在这里遇到了一些问题。假设我的应用程序安装在存储卡相关的 DLL 中,仅存在于存储卡中,如果我启动应用程序,它引用了一些 DLL,现在我将移除存储卡,我的应用程序仍然会运行,它不会退出,最终它会导致我的移动设备重新启动。我确实收到了芯片卡删除通知,但它在 DLL 及其 C++ 代码中。如果卡被删除,存储卡中将不会出现 DLL,我什至在 C# 中也没有收到通知,我不知道如何获取卡删除通知在 C# 中。如何处理这些情况,请告诉我。

谢谢

最佳答案

因为您绝对必须拥有源代码(就像您必须拥有 Compact Framework 本身和操作系统一样)并且因为 50 美元对于您获得 SDF 的源代码来说似乎太贵了,这是我的捐赠给你。这是来自 SDF 代码库的权利(对于任何想知道的人,我拥有它,所以我没有违反任何许可):

public static Guid STORE_MOUNT_GUID = new Guid(_STORE_MOUNT_GUID);
internal const string _STORE_MOUNT_GUID =
"{C1115848-46FD-4976-BDE9-D79448457004}";

[DllImport("coredll.dll", SetLastError = true)]
private static extern IntPtr RequestDeviceNotifications(
byte[] devclass, IntPtr hMsgQ, bool fAll);

[DllImport("coredll.dll", SetLastError = true)]
private static extern bool StopDeviceNotifications(IntPtr h);

可以使用 Daniel Moth's P2P queue implementation 检索队列指针(尽管它有已知的错误,这些错误已在 te SDF 中修复)。我没有发布 SDF 实现,因为它对于一个帖子来说太长了。

到这里,就变得这么简单了:

public void StartStatusMonitoring()
{
if (!Active)
{
// Create a point-to-point message queue to get the notifications.
m_p2pmq = new P2PMessageQueue(true);
m_p2pmq.DataOnQueueChanged += new EventHandler(p2pmq_DataOnQueueChanged);

// Ask the system to notify our message queue when devices of
// the indicated class are added or removed.
m_requestHandle = RequestDeviceNotifications(m_deviceClass.ToByteArray(),
m_p2pmq.Handle, m_fAll);
}
}

我相信,有了这么多信息以及您的时间没有内在值(value)这一事实,您可以将所有这些串在一起以获得解决方案。

编辑1

我应该补充一点,添加所有这些代码并不能 100% 解决您的问题。如果包含此“修复”的代码尚未进行 JITted,或者 JITted 代码已发布,并且拔出存储卡时它的 IL 驻留在不在 RAM 中的页面中,则设备仍会呕吐.无论代码是在您运行的应用程序代码“中”还是在单独的程序集中,这都是正确的,因此您认为必须拥有此源代码的想法是错误的。

添加此修复程序肯定会减少错误出现的机会窗口,但由于机会仍然存在,并且由于墨菲定律肯定适用于软件推出,你几乎可以保证这仍然会在现场发生.

关于c# - Windows Mobile 存储卡问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1464510/

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