다음 코드를 사용하여 "winmm.dll"을 가져옵니다.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 시스템의 모노에서는 한 가지 예외가 있습니다. 프로그램이 시작 되 자마자 아래에 표시된 것처럼 가져온 dll의 이름과 OK 버튼이있는 메시지 상자가 나타납니다. 확인 버튼을 클릭하면 프로그램이 계속 실행되고 오류없이 예상대로 실행됩니다.
나는 의도적으로 아무 곳이나 DLL 파일의 이름을 표시하고 있는지 확인하기 위해 내 프로그램을 통해 빗질했지만, 난 그저 그런 아무것도 찾을 수 없습니다.
편집 : 조금 더 정보를, 나는 그것에 스레드 수면 단위 또는 약 1 밀리 초에 이르기까지 기본 지연 또는 가까운 조정할 수 있어야입니다 winmm.dll 작업해야하는 이유 - 하지 않음을 영화 또는 음악 파일을 재생할 수 있습니다. 내가 조정할 수있는 유일한 방법은이 방법을 통해 timeBeginPeriod
과 timeEndPeriod
입니다. 그래서 내 프로그램은 시리얼 포트를 통해 성공적으로 대화 할 수있다. 내 프로그램은 24/7/365 일간 논스톱마다 몇 밀리 초씩 앞뒤로 이야기하는 것입니다. 커뮤니케이션이 90 % 이상인 것이 중요합니다. dll 파일을 가져온 후 Windows 프로그램과 Linux 프로그램에서 아무런 문제가 없습니다.
이전에는 그러한 문제에 대해 전혀 알지 못했습니다. 그 이유는 무엇입니까?
고마워,
앤드류 Finnell, 난 당신이 무슨 말을하는지 알고있다. 그러나, 내 프로그램이 작동하고 그 방법은 예상대로 작동하는 것 같습니다. 나는 직렬 통신을 위해 10ms 이하의 Thread.sleep 단위를 얻을 수 없었다. 위와 같은 작업을 수행 할 수있게되면 직렬 통신이 완벽 해 졌거나 Windows 및 Linux에서 100 % 확고합니다. 위에서 설명한 문제를 제외하고는 좋은 통신을 얻을 수 없습니다. 나는 너의 제안을 살펴볼 것이다. – ThN
나는 사람들이 실제로이 순간에 나에게 도움이되지 않는이 대답을 upvoting하는 것보다 더 많은 정보를 실제로 제공하기를 바란다. 나는 Thread.Sleep 지연을 줄이기 위해 가능한 한 실제 시간 지연에 가깝게해야합니다. System.Media.SoundPlayer 또는 LAME을 사용하여이를 수행 할 수 있습니까? – ThN
@ digitalanalog Millisecond 정밀도로 Thread.sleep을 사용하는 것에 대한 답을 얻지 못하는 이유에 대한 답변이 업데이트되었습니다. –