>End Sub
>Private Sub buttonTestFileReceive_Click(ByVal sender As Object, _
> ByVal e As EventArgs) Handles buttonTestFileReceive.Click
> 'Если файл назначения уже существует, уничтожить его
> Const fileName As String = "\myTestReceiveFile.txt"
> If (System.IO.File.Exists(fileName)) Then
> System.IO.File.Delete(fileName)
> End If
> Dim irdaFileReceiver As IrDAFileReceive
> irdaFileReceiver = New IrDAFileReceive(fileName, _
> myIrDASocketName)
> 'Имеется 2 режима: 1 — Sync (синхронный), 2 - Async (асинхронный)
> '1. Вызвать функцию в синхронном режиме
> ' блокировать поток выполнения до тех пор, пока
> 'файл не будет получен
> '1a. Информировать пользователя о том, что мы ожидаем получения файла
> Me.Text = "Waiting to receive..."
> '1b. Ожидать, пока не будет сделана попытка установления с нами связи
> 'и передачи файла
> irdaFileReceiver.WaitForIRFileDownload()
> '1с. Информировать пользователя о том, что мы получили переданный файл
> Me.Text = "IrDA: received!"
> MsgBox("File received!")
> '2. Вызвать функцию в асинхронном режиме и поручить
> 'получение файла фоновому потоку
> 'irdaFileReceive.WaitForIRFileDownloadAsync()
> 'ПРИМЕЧАНИЕ: Если мы вызываем функцию в асинхронном режиме, то должны
> 'периодически проверять, не завершила ли она выполнение, путем
> 'вызова метода 'irdaFileReceive.Status'
>End Sub
Листинг 15.4. Класс IrDAFileSend
>Option Strict On
>'====================================================================
>'Этот класс является клиентом IrDA. Он осуществляет поиск сервера
>'IrDA, имя которого совпадает с именем службы IrDA, и после того, как
>'он найден, направляет ему поток данных файла,
>'====================================================================
>Class IrDAFileSend
>Private m_descriptionOfLastSendAttempt As String
>Private m_IrDAServiceName As String
>Private m_fileToSend As String
>Private m_wasSenderStopped As Boolean
>Public Enum SendStatus
> AttemptingToSend
> Finished_Successfully
> Finished_Aborted
> Finished_Error
>End Enum
>Private m_SendStatus As SendStatus
>Public ReadOnly Property Status() As SendStatus
> Get
> 'Блокировка выполнения параллельных операций чтения/записи в m_SendStatus
> SyncLock (Me)
> Return m_SendStatus
> End SyncLock
> End Get
>End Property
>Private Sub setStatus(ByVal newStatus As SendStatus)
> 'Блокировка выполнения параллельных операций чтения/записи в m SendStatus
> SyncLock (Me)
> m_SendStatus = newStatus
> End SyncLock
>End Sub
>Public ReadOnly Property ErrorText() As String
> Get
> Return m_descriptionOfLastSendAttempt
> End Get
>End Property
>'-----------
>'КОНСТРУКТОР
>'-----------
>Public Sub New(ByVal fileToSend As String, ByVal irdaServiceName As String)