Функция DoEvents.

Обикновено програмистът очаква Windows (и Visual Basic) постоянно да наблюдава и реагира на всички събития. От друга страна, много време се отделя за различни видове изчисления или сортиране на данни. Въпреки това, не винаги е желателно да попречите на приложението Ви Visual Basic да реагира на събития. Ако се създаде процедура, при която много време ще бъде заето от различни видове изчисления, е необходим механизъм за наблюдение на състоянието на операционната система и реагиране на различни видове събития.

Функцията, която изпълнява този вид задачи, се нарича DoEvents. Където и да се появи това изявление в програмата, то сигнализира на Visual Basic, че контролът е прехвърлен към операционната система за обработка на всички събития. (Windows съхранява последователност от събития в опашката, както и натискания на клавиши в опашката SendKeys.) DoEvents не може да се използва в събитие, което се извиква няколко пъти. Например процедурата за събитие Click може да бъде извикана отново с щракване на мишката. Ако забравите за това, можете лесно да организирате безкраен цикъл в програмата.

Цикъл, който се изпълнява само когато няма събития, се нарича цикъл на изчакване. Такива цикли се създават в рамките на специализирана подпроцедура на име Main и се свързват с всеки програмен модул. Във всеки проект има само една Основна процедура. Форматът му е както следва:

След това трябва да се уверите, че модулът от Main е първо зареден. За да направите това, изберете Project | Project Properties от менюто и след това страницата General. На тази страница изберете и отворете списъка StartUp Object и изберете Sub Main вместо формуляра. След като основната процедура е посочена като стартираща. Visual Basic няма автоматично да зареди никаква форма. За да направите това, сега трябва да напишете програмен код, като използвате сервираните думи Зареждане и показване.

По-долу е прост пример за цикъл на изчакване. Трябва да създадете нов проект и да добавите програмен модул към него. Освен това той декларира глобална променлива Counter от тип long integer:

Сега нека добавим няколко реда код към основната процедура:

И накрая, инсталирайте Sub Main като модул за зареждане и добавете процедура Form_Click:

След стартиране на такава програма, броячът ще се увеличава всеки път, когато щракнете вътре във формуляра. Това е така, защото по време на периода на изчакване (когато потребителят не щракне) Visual Basic отива в Main и добавя 1 към брояча. Тъй като Counter е глобална променлива, стойността му продължава да съществува между извикванията на процедурите.

Функцията DoEvents всъщност връща броя на формулярите, заредени в момента от приложението. Цикълът на изчакване спира, когато всички форми се разтоварят. (Или Visual Basic отговаря на изявлението End.)

Друга често използвана функция DoEvents в рамките на дадена функция е да изпълнява отнемащи време изчисления. Задаването на цикъл на изчакване позволява на Visual Basic да реагира на събития по време на изчислението. Малко допълнително време се изплаща с лихва.