> 'чтобы оно соответствовало успешному завершению
> If (m_processingState <> ProcessingState.aborted) Then
> 'Обозначить завершение выполнения
> setProcessingState(ProcessingState.done)
> End If
> 'Выйти из потока...
>End Sub
>'----------------
>'Конечный автомат
>'----------------
>Public Sub setProcessingState(ByVal nextState As _
> ProcessingState)
> 'В любой момент времени только одному потоку выполнения могут быть
> 'разрешены попытки изменить состояние
> SyncLock (m_useForStateMachineLock)
> 'В случае попытки повторного вхождения в текущее состояние
> 'никакие дополнительные действия не выполняются
> If (m_processingState = nextState) Then
> Return
> End If
> '-----------------------------------------------------------
> 'Простейший защитный код, гарантирующий
> 'невозможность перехода в другое состояние, если задача либо
> 'успешно завершена, либо успешно отменена
> '-----------------------------------------------------------
> If ((m_processingState = ProcessingState.aborted) OrElse _
> (m_processingState = ProcessingState.done)) Then
> Return
> End If
> 'Убедиться в допустимости данного изменения состояния
> Select Case (nextState)
> Case ProcessingState.notYetStarted
> Throw New Exception _
> ("Переход в состояние 'notYetStarted' невозможен")
> Case ProcessingState.waitingToStartAsync
> If (m_processingState <> ProcessingState.notYetStarted) Then
> Throw New Exception("Недопустимое изменение состояния")
> End If
> Case ProcessingState.running
> If (m_processingState <> _
> ProcessingState.waitingToStartAsync) Then
> Throw New Ехсерtion("Недопустимое изменение состояния")
> End If
> Case ProcessingState.done
> 'Мы можем завершить работу лишь тогда, когда она выполняется.
> 'Это возможно также в тех случаях, когда пользователь затребовал
> 'отмену выполнения, но работа к этому моменту уже была закончена
> If ((m_processingState <> ProcessingState.running) AndAlso _
> (m_processingState <> ProcessingState.requestAbort)) Then
> Throw New Exception("Недопустимое изменение состояния")
> End If
> Case ProcessingState.aborted
> If (m_processingState <> ProcessingState.requestAbort) Then
> Throw New Exception("Недопустимое изменение состояния")
> End If
> End Select
> 'Разрешить изменение состояния
> m_processingState = nextState
> End SyncLock
>End Sub
>Public ReadOnly Property State() As ProcessingState
> Get
> Dim currentState As ProcessingState
> 'Предотвратить попытки одновременного чтения/записи состояния
> SyncLock (m_useForStateMachineLock)
> currentState = m_orocessingState
> End SyncLock
> Return currentState