06. december 2003 - 01:12Der er
19 kommentarer og 1 løsning
mit program "hænger"
Hej
Jeg sidder og laver et program som kommunikerer med et modem, og helt i starten af min kode har jeg skrevet følgende:
Do While MSComm1.InBufferCount = 0 Loop
mrn det får mit program til at hænge(vil ikke vise min form før mscomm1.inbuffercount bliver > 0), da den ikke udfører det kode der står under............. er der nogen der kan hjælpe mig ? jeg vil gerne have at mit program kører, men LIGESÅSNART mscomm1.inbuffercount > 0 skal programmet udføre "noget kode".
jeg kunne selvfølgelig bare indføre linjen:
if mscomm1.inbuffercount > 0 then goto DetRigtigeSted
en masse forskellige steder i min kode, MEN det ser jo grimt ud ad H til.
DoEvents giver andre "ting" (funktioner osv) lov til at blive udført.. Der er ikke godt at sætte krævende kode i form_load. Det er bedre at få en timer til at udføre en funktion efter 1 sec, eller 100 ms.. det skal bare være efter form_load er færdig med at afvikle kode..
Prøv f.eks. en Timer1 med intervallet 1 sekund (1000 ms):
Private Sub Timer1_Timer() Timer1.Interval = 0 Do While MSComm1.InBufferCount = 0 DoEvents Loop end sub
Private Sub Timer1_Timer() Timer1.Interval = 0 'er det her jeg kan skrive hvor mange ms ? Do While MSComm1.InBufferCount = 0 DoEvents Loop 'det der skal ske når mscomm1.inbufferCount bliver > 0, skal det 'stå her ???????? end sub
Timeren skal slukkes.. ellers sætter den sig fast i en loop der hele tiden prøver på at kører din loop.. ikke godt..: Timer1.Interval = 0
Private Sub Timer1_Timer() Timer1.Interval = 0 'er det her jeg kan skrive hvor mange ms ? Do While MSComm1.InBufferCount = 0 DoEvents ' her indsætter du den kode der skal udføres sålænge at MSComm1.InBufferCount= 0 Loop ' koden der skal udføres når MSComm1.InBufferCount ikke længere er 0, dvs <> 0, står her. end sub
Du sætter intervallet (ms) i egenskaber for timeren.. ikke i koden..
End Sub _______________________________________________________________________________
Private Sub Timer1_Timer() Timer1.Interval = 0 'her slukkes timeren ? Do While MSComm1.InBufferCount = 0 DoEvents ' her indsætter du den kode der skal udføres sålænge at MSComm1.InBufferCount= 0 Loop ' koden der skal udføres når MSComm1.InBufferCount ikke længere er 0, dvs <> 0, står her. end sub
End Sub _______________________________________________________________________________
Private Sub Timer1_Timer() Timer1.Interval = 0 'her slukkes timeren ? Do While MSComm1.InBufferCount = 0 DoEvents ' her indsætter du den kode der skal udføres sålænge at MSComm1.InBufferCount= 0 Loop ' koden der skal udføres når MSComm1.InBufferCount ikke længere er 0, dvs <> 0, står her. end sub
er DÉT så rigtigt ? timeren skulle være EFTER koden...ik'?
rettelse.. timer-sub'en.. ikke timer-koden.. timer-koden skal være i timer-sub'en.. timer-sub'en kan du placere hvor du vil.. bare ikke i en anden sub eller funktion :)
Hvis du ikke har fået det til at virker, skal jeg ikke have points endnu.. Hvis det virker, skal du lige sige til, så vil jeg lægge et svar som du kan acceptere..
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.