багатопотокові програми

З Visual Basic можна писати програми, які виконують кілька завдань одночасно. Завдання, які потенційно можуть затримати виконання інших завдань, виконуються в окремих потоках; такий спосіб організації роботи програми називається багатопоточність або вільним створенням потоків.

Програми, що використовують багатопоточність, більш оперативно реагують на дії користувача, оскільки призначений для користувача інтерфейс залишається активним, в той час як завдання, що вимагають інтенсивної роботи процесора, виконуються в інших потоках. Нить також ефективна при створенні масштабованих додатків, оскільки користувач може додавати потоки при збільшенні робочого навантаження.

Найбільш надійний спосіб створення багатопотокового додатку є використання компонента BackgroundWorker. Цей клас управляє окремими потоками зазначеного методу обробки. Приклад см. В розділі Покрокове керівництво. Нить.

Щоб запустити операцію в фоновому режимі, необхідно створити BackgroundWorker і відстежувати події, повідомляють про хід виконання операції і сигналізують про її завершення. Можна створити об'єкт BackgroundWorker програмними засобами або перетягнути його в форму з вкладки Компоненти Панелі елементів. При створенні BackgroundWorker в Forms Designer. воно з'являється в Області компонента. і його властивості відображаються у вікні Властивості.

Щоб налаштувати виконання операції у фоновому режимі, необхідно додати обробник події для події DoWork. Викличте операцію, яка займає багато часу, в цьому обробнику подій.

Щоб почати операцію, викличте RunWorkerAsync. Щоб отримувати повідомлення про хід виконання, необхідно обробити подію ProgressChanged. Якщо необхідно отримувати повідомлення після завершення операції, обробіть подія RunWorkerCompleted.

Методи, які обробляють події ProgressChanged і RunWorkerCompleted мають доступ до призначеного для користувача інтерфейсу додатка, так як ці події викликаються в потоці, який викликав метод RunWorkerAsync. Однак обробник подій DoWork не може працювати з об'єктами призначеного для користувача інтерфейсу, оскільки він запускається у фоновому потоці.

Якщо потрібен більший контроль над поведінкою потоків додатки, можна управляти потоками самостійно. Однак необхідно мати на увазі, що написання правильних багатопоточних додатків може бути складним завданням. Додаток може перестати відповідати на запити або можуть виникати тимчасові помилки, викликані конфліктами. Додаткові відомості див. У розділі потокобезпечна компоненти.

Кожен потік має пріоритетне властивість, яка визначає, яку частину процесорного часу він повинен зайняти при виконанні. Операційна система виділяє довші відрізки часу на потоки з високим пріоритетом і коротші на потоки з низьким пріоритетом. Нові потоки створюються зі значенням Normal. але можна змінити властивість Priority на будь-яке значення в перерахуванні ThreadPriority.

Опис різних пріоритетів потоків см. В розділі ThreadPriority.

Основний потік виконується нескінченно, тоді як фоновий потік зупиняється відразу після зупинки останнього основного потоку. Для визначення або зміни фонового статусу потоку можна використовувати властивість IsBackground.