Иво Салмре - Программирование мобильных устройств на платформе .NET Compact Framework
- Название:Программирование мобильных устройств на платформе .NET Compact Framework
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс
- Год:2006
- Город:Москва • Санкт-Петербург • Киев
- ISBN:5-8459-0989-9
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Иво Салмре - Программирование мобильных устройств на платформе .NET Compact Framework краткое содержание
Книга известного профессионала в области компьютерных технологий посвящена разработке приложений для широкого спектра мобильных устройств с использованием популярной и постоянно развивающейся платформы .NET Compact Framework. Уникальность этой книги состоит в том, что в ней гармонично переплетены теоретические сведения обо всем цикле разработки программного обеспечения с практическими примерами применения на языках С# и Visual Basic. Подробно рассматриваются концепции, лежащие в основе самой платформы .NET Compact Framework, а также вопросы, связанные с созданием эффективного пользовательского интерфейса, управлением памятью, производительностью и надежностью. Немалое внимание уделяется практическим аспектам разработки приложений для мобильных устройств, среди которых выбор модели представления и доступа к данным, внедрение коммуникационной модели, реализация модели поведения с помощью конечных автоматов и использование XML.
Книга рассчитана на разработчиков разной квалификации, а также может быть полезна для студентов и преподавателей соответствующих специальностей.
Программирование мобильных устройств на платформе .NET Compact Framework - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
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
Try
irDASender.Close()
Catch
'Поглотить любую ошибку
End Try
irDASender = Nothing
End If
Return 'Выход
End Try
'Проверить успешность выполнения
If (bSuccess = True) Then
m_descriptionOfLastSendAttempt = "Success!"
setStatus(SendStatus.Finished Successfully)
Return
End If
'Проверить, не была ли операция отменена пользователем
If (m_wasSenderStopped = True) Then
m_descriptionOfLastSendAttempt = "User Aborted."
setStatus(SendStatus.Finished_Aborted)
Return
End If
'В противном случае... Нам пока не удалось обнаружить сервер IrDA,
'имя которого совпадает с именем службы. Мы продолжим выполнение цикла
'и попытаемся найти сервер.
End While
'Мы никогда не попадем в это место программы при выполнении
End Sub
'----------------------------------------------------------------------
'Попытаться передать поток ввода-вывода (например, файл) посредством IR
'[возвращаемое значение]:
' true: успешная передача файла
' false: файл не был успешно передан
'----------------------------------------------------------------------
Private Function sendStream(ByRef errorDescription As String, _
ByRef streamOutToIrDA As System.IO.Stream, _
ByRef irDASender As System.Net.Sockets.IrDAClient, _
ByRef streamInFromFile As System.IO.Stream) As Boolean
errorDescription = ""
'----------------------------
'Создание нового клиента IRDA
'----------------------------
Try
'-------------------------------------------------------
'Возврат произойдет довольно быстро. Клиент будет выбран
'и возвращен, если прослушивающие клиенты отсутствуют.
'-------------------------------------------------------
irDASender = _
New System.Net.Sockets.IrDAClient(m_IrDAServiceName)
Catch eCreateClient As System.Exception
'В данном случае могли возникнуть несколько ситуаций:
'#1: отсутствуют прослушивающие устройства
'#2: прослушивающее устройство существует, но не реагирует
' (может отказаться от разговора)
errorDescription = eCreateClient.Message
Return False
End Try
'В данном случае могли возникнуть несколько ситуаций:
'#1: Мы получили соединение от приемного устройства IR
'#2: IR-запрос был отменен (кто-то вызвал функцию STOP).
If (m_wasSenderStopped = True) Then
irDASender.Close()
irDASender = Nothing
Return False
End If
'==========================================
'ПЕРЕДАТЬ ДАННЫЕ!
'==========================================
'Открыть файл, который мы хотим передать
streamInFromFile = System.IO.File.OpenRead(m_fileToSend)
'Открыть сокет IrDA, которому мы хотим передать данные
streamOutToIrDA = irDASender.GetStream()
Const BUFFER_SIZE As Integer = 1024
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
'-------------------------------------------------------------------
Интервал:
Закладка: