Funcția DoEvents

De obicei, un programator se așteaptă ca Windows (și Visual Basic) să monitorizeze în mod constant și să răspundă la toate evenimentele. Pe de altă parte, se petrece mult timp pe diferite tipuri de calcule sau sortare a datelor. Cu toate acestea, nu este întotdeauna de dorit să împiedicați o aplicație Visual Basic să răspundă la evenimente. Dacă se creează o procedură în care mult timp va fi ocupat de diferite tipuri de calcule, este necesar un mecanism pentru a urmări starea sistemului de operare și a răspunde la diferite tipuri de evenimente.

Funcția care realizează acest tip de sarcină se numește DoEvents. Oriunde în program apare această declarație, ea semnalează Visual Basic că controlul a fost transferat sistemului de operare pentru a procesa toate evenimentele. (Windows stochează ordinea în care apar evenimentele din coadă, precum și apăsările de taste din coada SendKeys.) DoEvents nu poate fi utilizat într-o procedură de eveniment care este apelată de mai multe ori. De exemplu, o procedură de eveniment Click poate fi apelată din nou printr-un clic de mouse. Dacă uiți de asta, poți organiza cu ușurință o buclă infinită în program.

O buclă care rulează numai dacă nu există evenimente se numește buclă de așteptare. Astfel de cicluri sunt create în cadrul unei proceduri specializate Sub, numită Main, și conectate la orice modul de program. Există o singură procedură principală per proiect. Formatul său este următorul:

Apoi, trebuie să vă asigurați că modulul cu Main este încărcat mai întâi. Pentru a face acest lucru, selectați elementul de meniu ProjectProject Properties și apoi pagina General. Pe această pagină, selectați și deschideți lista StartUp Object și selectați Sub Main în loc de Form. După ce procedura Main este specificată ca boot. Visual Basic nu se va încărca automatvreo formă. Pentru a face acest lucru, acum este necesar să scrieți codul programului folosind cuvintele servite Load and Show.

Mai jos este un exemplu simplu de buclă de așteptare. Trebuie să creați un nou proiect și să adăugați un modul software la acesta. Apoi, declară o variabilă globală Counter de tipul întreg lung:

Acum să adăugăm câteva linii de cod la procedura principală:

În cele din urmă, să instalăm Sub Main ca modul de încărcare și să adăugăm procedura Form_Click:

După rularea unui astfel de program, contorul va crește de fiecare dată după ce faceți clic în interiorul formularului. Motivul este că în timpul perioadei de așteptare (când utilizatorul nu dă clic), Visual Basic sare la procedura principală și adaugă 1 la contor. Deoarece Counter este o variabilă globală, valoarea sa este păstrată între apelurile de procedură.

Funcția DoEvents returnează de fapt numărul de formulare încărcate în prezent de aplicație. Ciclul de așteptare se oprește când toate formularele sunt descărcate. (Sau Visual Basic întâlnește o instrucțiune End.)

O altă utilizare comună a funcției DoEvents în cadrul unei funcții este de a rula calcule mari de timp. Setarea unei bucle de așteptare permite Visual Basic să răspundă la evenimente în momentul calculării. Un pic de timp în plus merită mai mult decât.