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

ЖАНРЫ

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

Dim inBuffer As Byte

ReDim inBuffer(BUFFER_SIZE)

Dim bytesRead As Integer

Dim iTestAll As Integer

Dim iTestWrite As Integer

' Цикл...

Do

'Считать байты из файла

bytesRead = streamInFromFile.Read(inBuffer, 0, BUFFER_SIZE)

iTestAll = iTestAll + 1

'Записать байты в наш выходной поток

If (bytesRead > 0) Then

streamOutToIrDA.Write(inBuffer, 0, bytesRead)

iTestWrite = iTestWrite + 1

End If

Loop While (bytesRead > 0)

'Сбросить выходной поток

streamOutToIrDA.Flush 'Закончить запись любых данных

streamOutToIrDA.Close 'Закрыть поток

streamOutToIrDA = Nothing

'Освободить локальный файл

streamInFromFile.Close

streamOutToIrDA = Nothing

'Освободить порт IrDA

irDASender.Close

irDASender = Nothing

'Успешное завершение!!!

Return True

End Function

End Class

Листинг 15.5. Класс IrDAFileReceive

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

'Обеспечивает прием файла через IrDA (инфракрасный порт)

'Этот класс НЕ является реентерабельным и не должен вызываться более

'чем одной функцией за один раз. Если необходимо иметь несколько

'сеансов связи через IR, это необходимо делать путем создания

'нескольких различных экземпляров данного класса.

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

Public Class IrDAFileReceive

Private m_wasListenerStopped As Boolean

Private m_IrDAServiceName As String

Private m_fileNameForDownload As String

Private m_errorDurmgTransfer As String

Private m_irListener As System.Net.Sockets.IrDAListener

Private m ReceiveStatus As ReceiveStatus

Public ReadOnly Property ErrorText As String

Get

Return m_errorDuringTransfer

End Get

End Property

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

'Различные состояния приема

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

Public Enum ReceiveStatus

NotDone_SettingUp

NotDone_WaitingForSender

NotDone_Receiving

Done_Success

Done_Aborted

Done_ErrorOccured

End Enum

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

' Возвращает состояние передачи

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

Public ReadOnly Property Status As ReceiveStatus

Get

SyncLock (Me)

Return m_ReceiveStatus

End SyncLock

End Get

End Property

Private Sub setStatus(ByVal newStatus As ReceiveStatus)

'Обеспечить многопоточную безопасность для предотвращения

'параллельного выполнения операций чтения/записи

SyncLock (Me)

m_ReceiveStatus = newStatus

End SyncLock 'end lock

End Sub

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

' (in) filename: желаемое имя для входного файла IR

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

Public Sub New(ByVal filename As String, ByVal irdaServiceName As String)

'Имя сокета IrDA, который мы хотим открыть

m_IrDAServiceName = irdaServiceName

'Имя файла, в котором мы хотим сохранить полученные данные

m_fileNameForDownload = filename

End Sub

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

'Обеспечивает асинхронный прием файла через IR

' (in) filename: имя файла, в который осуществляется запись

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

Public Sub WaitForIRFileDownloadAsync

'Заметьте, что сейчас мы находимся в режиме подготовки

setStatus(ReceiveStatus.NotDone_SettingUp)

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

'Создать новый поток

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

Dim threadEntryPoint As System.Threading.ThreadStart

threadEntryPoint = _

New System.Threading.ThreadStart(AddressOf WaitForIRFileDownload)

Dim newThread As System.Threading.Thread = _

New System.Threading.Thread(threadEntryPoint)

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