> End Get
>End Property
>End Class
Листинг 9.2. Тестовая программа для выполнения работы в фоновом потоке
>Option Strict On
>Imports System
>'---------------------------------------------------------
>'Тестовый код, который используется для выполнения фоновым
>'потоком
>'---------------------------------------------------------
>Public Class Test1
>Public m_loopX As Integer
>'------------------------------------------------------------------
>'Функция, вызываемая фоновым потоком
>' [in] threadExecute: Класс, управляющий выполнением нашего потока.
>' Мы можем контролировать его для проверки
>' того, не следует ли прекратить вычисления
>'------------------------------------------------------------------
>Public Sub ThreadEntryPoint(ByVal threadExecute As _
> ThreadExecuteTask)
> 'Это окно сообщений будет отображаться в контексте того потока,
> 'в котором выполняется задача MsgBox("Выполнение ТЕСТОВОГО ПОТОКА")
> '-------
> ' 60 раз
> '-------
> For m_loopX = 1 To 60
> 'Если затребована отмена выполнения, мы должны завершить задачу
> If (threadExecute.State = _
> ThreadExecuteTask.ProcessingState.requestAbort) Then
> threadExecute.setProcessingState( _
> ThreadExecuteTask.ProcessingState.aborted)
> Return
> End If
> 'Имитировать выполнение работы: пауза 1/3 секунды
> System.Threading.Thread.Sleep(333)
> Next
>End Sub
>End Class
Листинг 9.3. Код для запуска и тестирования приведенного выше тестового кода
>'Класс, который будет управлять выполнением нового потока
>Private m_threadExecute As ThreadExecuteTask
>'Класс, метод которого мы хотим выполнять в асинхронном режиме
>Private m_testMe As Test1
>'-----------------------------------------------------------------------
>'Этот код должен быть запущен ранее другого кода, поскольку он запускает
>'новый поток выполнения!
>'
>'Создать новый поток и обеспечить его выполнение
>'-----------------------------------------------------------------------
>Private Sub buttonStartAsyncExecution_Click(ByVal sender _
> As System.Object, ByVal e As System.EventArgs) _
> Handles buttonStartAsyncExecution.Click
> 'Создать экземпляр класса, метод которого мы хотим вызвать
> 'в другом потоке
> m_testMe = New Test1
> 'Упаковать точку входа метода класса в делегат
> Dim delegateCallCode As _
> ThreadExecuteTask.ExecuteMeOnAnotherThread
> delegateCallCode = _
> New ThreadExecuteTask.ExecuteMeOnAnotherThread(AddressOf _
> m_testMe.ThreadEntryPoint)
> 'Дать команду начать выполнение потока!
> m_threadExecute = New ThreadExecuteTask(delegateCallCode)
>End Sub
>'Принудительно вызвать запрещенное изменение состояния (это приведет
>'к возбуждению исключения)