我有一个奇怪的问题。我需要使用几个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(),但可能需要重组代码-例如,将async / await与Task.Delay一起使用。

关于c# - 没有MessageBox,C#DLL无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51149182/

10-12 05:42