我有一个有点奇怪的问题。我需要使用几个 DLL 才能使用 NFC 阅读器进行读写。
这个有效:
LV3_InitializeSystem(5);
setAuthCode();
MessageBox.Show(""); // I immediately click and close the box
short ret = LV3_CheckIssuer();
Console.WriteLine(ret); // 0 - Success
这行不通:
LV3_InitializeSystem(5);
setAuthCode();
short ret = LV3_CheckIssuer();
Console.WriteLine(ret); // 90 - Card reader can not be detected.
这也行不通:
LV3_InitializeSystem(5);
setAuthCode();
Thread.Sleep(5000);
short ret = LV3_CheckIssuer();
Console.WriteLine(ret); // 90 - Card reader can not be detected.
我不知道可能是什么问题。我尝试使用线程运行初始化部分但没有成功。显示 MessageBox
如何使初始化完成但 Thread.Sleep()
却没有?
最佳答案
DLL 显然在 Windows 消息队列上发布了一些必需的消息。为了处理消息,必须清空消息队列。
确保处理这些消息的一种方法是使用 Application.DoEvents()。通常 Application.DoEvents() 是不受欢迎的 - 请参阅 https://blog.codinghorror.com/is-doevents-evil/这是为什么。
有其他方法可以在不使用 Application.DoEvents() 的情况下解决此问题,但它可能需要重构您的代码 - 例如使用带有 Task.Delay 的异步/等待。
关于没有 MessageBox,C# DLL 无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51149182/