没有MessageBox,C#DLL将无法工作

时间:2018-07-03 07:47:15

标签: c# .net dll

我有一个奇怪的问题。我需要使用几个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()没有完成?

1 个答案:

答案 0 :(得分:1)

DLL显然在Windows消息队列上发布了一些必需的消息。为了处理消息,必须清空消息队列。

确保处理这些消息的一种方法是使用Application.DoEvents()。通常不赞成Application.DoEvents()-有关原因请参见https://blog.codinghorror.com/is-doevents-evil/

还有其他方法可以解决此问题,而无需使用Application.DoEvents(),但这可能需要重组代码-例如,使用带有Task.Delay的async / await。