没有 MessageBox,C# DLL 无法工作

标签 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() 却没有?

最佳答案

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/

相关文章:

c - DLL 隐式链接

c# - C# 程序在哪里寻找 DLL?

c# - Sql中如何替换select语句中的列值?

c# - Xml序列化

c# - ASP.NET 开发服务器模拟 IIS6 或 IIS7?

c# - 在 C# .NET 中使用 Lambda 进行模糊调用

c# - 为什么这个字符串扩展方法没有抛出异常?

c# - 性能相交和不同的元素提取?

.net - 在没有 C# 的情况下从 F# 学习 .NET

c++ - 如何在 VC10 中跨 DLL 边界使用具有静态数据成员的模板化类