Программирование мобильных устройств на платформе .NET Compact Framework
Шрифт:
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
'Попытаться передать поток
Dim bSuccess As Boolean
Try
bSuccess = sendStream(mjdescriptionOfLastSendAttempt, _
streamOutToIrDA, irDASender, streamInFromFile)
Catch eUnexpected As System.Exception 'Неожиданная ошибка!!!
setStatus(SendStatus.Finished_Error) 'Уведомить о сбое
m_descriptionOfLastSendAttempt = _
"Unexpected error in IR send loop. " + eUnexpected.Message
'------------------------------------------------
'Освободить все распределенные нами ранее ресурсы
'------------------------------------------------
If Not (streamOutToIrDA Is Nothing) Then
Try
streamOutToIrDA.Close
Catch
'Поглотить любую ошибку
End Try
streamOutToIrDA = Nothing
End If
If Not (streamInFromFile Is Nothing) Then
Try
streamInFromFile.Close
Catch
'Поглотить любую ошибку
End Try
streamInFromFile = Nothing
End If
If Not (irDASender Is Nothing) Then
Поделиться с друзьями: