我使用以下代码导入“winmm.dll”。
MyUtils = public static class
private
protected
public
[DllImport("winmm.dll")]
class method timeBeginPeriod(period:Integer):Integer; external;
[DllImport("winmm.dll")]
class method timeEndPeriod(period:Integer):Integer; external;
end;
访问方法如下。
MyUtils.timeBeginPeriod(1); //within winform load event
MyUtils.timeEndPeriod(1); //within winform formclosing event
在 Windows 7 下,它按预期工作得很好。在 Linux 系统上的 mono 下,它也可以正常工作,但有一个例外。程序启动后,会弹出一个消息框,其中包含导入的 dll 的名称和 OK 按钮,如下所示。当我单击“确定”按钮时,我的程序继续并按预期运行,没有任何错误。
我已经梳理了我的程序,看看我是否有意在任何地方显示 dll 文件名,但我根本找不到类似的东西。
编辑:更多信息,我需要使用 winmm.dll 的原因是我需要能够将线程睡眠粒度或默认延迟调整到大约 1 毫秒或接近它 -不要播放电影或音乐文件。我能够调整的唯一方法是通过这些方法timeBeginPeriod
和timeEndPeriod
. 这样我的程序就可以通过串口成功通话了。我的程序是每隔几毫秒来回交谈一次,24/7/365 天不间断。至关重要的是,它的通信达到 90% 或更多。导入 dll 文件后,我的程序在 windows 和 linux 上的通信是完美的,除了我在单声道下的 Linux 上得到那个烦人的消息框。
我以前从未见过或听说过这样的问题。有人为什么吗?
谢谢,