Читать «Программирование мобильных устройств на платформе .NET Compact Framework» онлайн - страница 566
Иво Салмре
irdaFileSender.LoopAndAttemptIRSend()
'1c. Информировать пользователя о том, что файл передан
MsgBox("File sent!")
Me.Text = "IrDA: Sent!"
'2. Вызвать функцию в асинхронном режиме и поручить
'передачу файла фоновому потоку
'irdaFileSend.LoopAndAttemptIRSendAsync()
'ПРИМЕЧАНИЕ: Если мы вызываем функцию в асинхронном режиме, то должны
'периодически проверять, не завершила ли она выполнение, путем
'вызова метода 'irdaFileSend.Status'
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)