2012-02-24 3 views
1

System.Thread.Sleep (간격)을 사용하지 않고 어떻게 지연을 만들 수 있는지 묻고 싶습니다.VB.NET 다중 스레드 SerialPort SMS 지연

내 응용 프로그램은 GSM 모뎀과의 인터페이스를 위해 serialport를 사용하여 SMSINBOX를 읽는 무한 루프에서 서버를 실행합니다. readSMSINBOX() 다음에 지연이옵니다 ... 여기서 문제는 지연이 나를 죽이는 것입니다 ... 그것은 내 애플 리케이션의 모든 컨트롤을 중단합니다. 독서 이외의 다른 기능은 userMANAGEMENT, 콘솔 등을 보내는 것입니다. SYSTEM.TIMERS 또는 SYSTEM.THREADING 또는 BACKGROUNDworker를 사용하여 앱을 걸지 않고 시간을 소비하는 지연을 어떻게 구현할 수 있는지 생각해보십시오. 제발 ... 할 수 있습니다. 여기에 모든 코드를 게시하지 마십시오. 라이브 사이트에서 내 코드를 게시하는 방법을 모르십시오. 그냥 순수한 NOOB ..

+0

? readSMSINBOX()를 주기적으로 실행하는 목표입니까, 30 초마다를 가정 해 봅시다. –

+0

귀하의 우려에 대해 감사합니다 rokjarc. 예, 정확히 ... 그러나'readINBOX()'와'sendMESSAGE()'는 ** 응용 프로그램에서 ** SYSTEM.THREADING.THREAD.SLEEP()'을 사용하여 UI 쓰레드가 ** 걸려있는 ** (NOT RESPONDING) 앱의 모든 컨트롤. 그게 문제 야. 다른 스레드에서 실행될 수있는 지연은 정확히 무엇일까? 또한 _ 시간을 소비한다. cmdButtons, txtbox, tabs와 같은 컨트롤에 액세스 할 수 있도록하려면이 값이 필요합니다 ... – Jed

답변

1

그럼 타이머가 정확히 당신이 필요로하는 (UI를 차단하지 않습니다)해야합니다.

는 타이머의

정확한 구현은 VB.NET의 버전에 따라 달라집니다 당신이 사용하고 있지만 여기에 타이머를 사용하는 좋은 (및 다운로드) 예를 찾을 수 있습니다 : Working with Timer Control in VB.NET

가져해야합니다 System.Timers

myTimer는 기본 폼

Timer myTimer 

의 코드에서 변수가 될 수 있습니다 당신은 그것을 설정하고 Form1_load

에서 시작할 수 있습니다
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) 

    myTimer = new Timer(30000) 
    myTimer.Enabled = true 
    addhandler myTimer.Tick,addressof OnTimerEvent 

End Sub 

16,그리고 당신 (틱) 핸들러는 무언가 같이 될 것이다 :

Private Sub OnTimerEvent(ByVal sender As System.Object, ByVal e As System.EventArgs) 

    'here you can call you communication routines 

End Sub 
정확히 지연으로 무슨 소리
+0

Ok. 대단히 감사합니다 ...하지만 OnTimerEvent()를 실행할 때 지연 간격을 어떻게 바꿀 수 있습니까? – Jed

+0

알았어요. 고마워요. 로크 야크 ... 벌써 받았어요. 고마워요. 많이 도와 줬어 .-D – Jed

+0

. 천만에. –