Программирование мобильных устройств на платформе .NET Compact Framework (Салмре) - страница 597

>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)