Чтение онлайн

ЖАНРЫ

Программирование мобильных устройств на платформе .NET Compact Framework
Шрифт:

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

'Имя сокета IrDA, поиск которого мы хотим осуществить

m_IrDAServiceName = irdaServiceName

'Файл, который мы хотим передать

m_fileToSend = fileToSend

End Sub

'--------------------------------------------------------------

'Запускает новый поток для осуществления попытки отправки файла

'--------------------------------------------------------------

Public Sub LoopAndAttemptIRSendAsync

'Мы находимся в режиме передачи

setStatus(SendStatus.AttemptingToSend)

'Пользователь пока что не отменил выполнение операции

m_wasSenderStopped = False

'Это функция, которую должен запустить на выполнение новый поток

Dim threadEntryPoint As System.Threading.ThreadStart

threadEntryPoint = _

New System.Threading.ThreadStart(AddressOf LoopAndAttemptIRSend)

'-----------------------------------

'Создать новый поток и запустить его

'-----------------------------------

Dim newThread As System.Threading.Thread = _

New System.Threading.Thread(threadEntryPoint)

newThread.Start

'Вперед!

End Sub

'-----------------------------------------------------

'Входит в цикл и пытается передать файл посредством IR

'-----------------------------------------------------

Public Sub LoopAndAttemptIRSend

Dim irDASender As System.Net.Sockets.IrDAClient

Dim streamOutToIrDA As System.IO.Stream

Dim streamInFromFile As System.IO.Stream

'Пользователь пока что не отменил выполнение операции

m_wasSenderStopped = False

setStatus(SendStatus.AttemptingToSend)

'-----------------------------------------------------------------

'Непрерывное выполнение цикла, пока не удастся отправить сообщение

'-----------------------------------------------------------------

While (True)

'Значения всех этих переменных должны быть нулевыми до и после

'вызова sendStream(...), если не было сгенерировано исключение!

irDASender = Nothing

streamOutToIrDA = Nothing

streamInFromFile = Nothing

'Попытаться передать поток

Поделиться с друзьями: