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

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.
Жалоба
Напишите нам, и мы в срочном порядке примем меры.
Описание книги "Программирование мобильных устройств на платформе .NET Compact Framework"
Описание и краткое содержание "Программирование мобильных устройств на платформе .NET Compact Framework" читать бесплатно онлайн.
Книга известного профессионала в области компьютерных технологий посвящена разработке приложений для широкого спектра мобильных устройств с использованием популярной и постоянно развивающейся платформы .NET Compact Framework. Уникальность этой книги состоит в том, что в ней гармонично переплетены теоретические сведения обо всем цикле разработки программного обеспечения с практическими примерами применения на языках С# и Visual Basic. Подробно рассматриваются концепции, лежащие в основе самой платформы .NET Compact Framework, а также вопросы, связанные с созданием эффективного пользовательского интерфейса, управлением памятью, производительностью и надежностью. Немалое внимание уделяется практическим аспектам разработки приложений для мобильных устройств, среди которых выбор модели представления и доступа к данным, внедрение коммуникационной модели, реализация модели поведения с помощью конечных автоматов и использование XML.
Книга рассчитана на разработчиков разной квалификации, а также может быть полезна для студентов и преподавателей соответствующих специальностей.
Public Class Test1
Public m_loopX As Integer
'------------------------------------------------------------------
'Функция, вызываемая фоновым потоком
' [in] threadExecute: Класс, управляющий выполнением нашего потока.
' Мы можем контролировать его для проверки
' того, не следует ли прекратить вычисления
'------------------------------------------------------------------
Public Sub ThreadEntryPoint(ByVal threadExecute As _
ThreadExecuteTask)
'Это окно сообщений будет отображаться в контексте того потока,
'в котором выполняется задача MsgBox("Выполнение ТЕСТОВОГО ПОТОКА")
'-------
' 60 раз
'-------
For m_loopX = 1 To 60
'Если затребована отмена выполнения, мы должны завершить задачу
If (threadExecute.State = _
ThreadExecuteTask.ProcessingState.requestAbort) Then
threadExecute.setProcessingState( _
ThreadExecuteTask.ProcessingState.aborted)
Return
End If
'Имитировать выполнение работы: пауза 1/3 секунды
System.Threading.Thread.Sleep(333)
Next
End Sub
End Class
Листинг 9.3. Код для запуска и тестирования приведенного выше тестового кода'Класс, который будет управлять выполнением нового потока
Private m_threadExecute As ThreadExecuteTask
'Класс, метод которого мы хотим выполнять в асинхронном режиме
Private m_testMe As Test1
'-----------------------------------------------------------------------
'Этот код должен быть запущен ранее другого кода, поскольку он запускает
'новый поток выполнения!
'
'Создать новый поток и обеспечить его выполнение
'-----------------------------------------------------------------------
Private Sub buttonStartAsyncExecution_Click(ByVal sender _
As System.Object, ByVal e As System.EventArgs) _
Handles buttonStartAsyncExecution.Click
'Создать экземпляр класса, метод которого мы хотим вызвать
'в другом потоке
m_testMe = New Test1
'Упаковать точку входа метода класса в делегат
Dim delegateCallCode As _
ThreadExecuteTask.ExecuteMeOnAnotherThread
delegateCallCode = _
New ThreadExecuteTask.ExecuteMeOnAnotherThread(AddressOf _
m_testMe.ThreadEntryPoint)
'Дать команду начать выполнение потока!
m_threadExecute = New ThreadExecuteTask(delegateCallCode)
End Sub
'Принудительно вызвать запрещенное изменение состояния (это приведет
'к возбуждению исключения)
Private Sub buttonCauseException_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles buttonCauseException.Click
m_threadExecute.setProcessingState( _
ThreadExecuteTask.ProcessingState.notYetStarted)
End Sub
'Послать асинхронному коду запрос с требованием отмены его выполнения
Private Sub buttonAbort_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles buttonAbort.Click
m_threadExecute.setProcessingState( _
ThreadExecuteTask.ProcessingState.requestAbort)
End Sub
'Проверить состояние выполнения
Private Sub buttonCheckStatus_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles ButtonCheckStatus.Click
'Запросить у класса управления потоком, в каком состоянии он находится
MsgBox(m_threadExecute.State.ToString())
'Запросить класс, метод которого выполняется в потоке,
'o состоянии выполнения
MsgBox(m_testMe.m_loopX.ToString())
End Sub
Листинг 9.4. Код, который должен быть помещен в класс Smartphone Form1.cs'------------------------------------------------------
'Весь этот код должен находиться внутри класса Form1.cs
'------------------------------------------------------
'Объект, который будет выполнять все фоновые вычисления
Private m_findNextPrimeNumber As FindNextPrimeNumber
'--------------------------------------------
'Обновить текст, информирующий о состоянии...
'--------------------------------------------
Sub setCalculationStatusText(ByVal text As String)
Label1.Text = text
End Sub
Private Sub menuItemExit_Click(ByVal sender As _
System.Object, ByVal e As System.EventArgs) _
Handles menuItemExit.Click
Me.Close()
End Sub
'----------------------------------------
'Пункт меню для начала фоновых вычислений
'----------------------------------------
Private Sub menuItemStart Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles menuItemStart.Click
'Число, с которого мы хотим начать поиск
Dim startNumber As Long = System.Convert.ToInt64(TextBox1.Text)
'Установить фоновое выполнение
m_findNextPrimeNumber = New FindNextPrimeNumber(startNumber)
'Запустить выполнение задачи в фоновом режиме...
m_findNextPrimeNumber.findNextHighestPrime_Async()
'Установить таймер, используемый для контроля длительности вычислений
Timer1.Interval = 400 '400 мс
Timer1.Enabled = True
End Sub
'--------------------------------------------
'Пункт меню для "отмены" выполняющейся задачи
'--------------------------------------------
Private Sub menuItemAbortClick(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles menuItemAbort.Click
'Не делать ничего, если вычисления не выполняются
If (m_findNextPrimeNumber Is Nothing) Then Return
'Установить поток в состояние прекращения выполнения
m_findNextPrimeNumber.setProcessingState( _
FindNextPrimeNumber.ProcessingState.requestAbort)
'Немедленно известить пользователя 'o готовности прекратить выполнение...
setCalculationStatusText("Ожидание прекращения выполнения...")
End Sub
'--------------------------------------------------------------
'Этот таймер, вызываемый потоком пользовательского интерфейса,
'позволяет отслеживать состояние выполнения 'фоновых вычислений
'--------------------------------------------------------------
Private Sub Timer1_Tick(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Timer1.Tick
'Если к моменту вызова искомое простое число еще
'не было найдено, отключить таймер
If (m_findNextPrimeNumber Is Nothing) Then
Timer1.Enabled = False
Return
End If
'-------------------------------------------------
'Если выполнение было отменено, освободить объект,
'осуществляющий поиск, и выключить таймер
'-------------------------------------------------
If (m_findNextPrimeNumber.getProcessingState = _
FindNextPrimeNumber.ProcessingState.aborted) Then
Timer1.Enabled = False
m_findNextPrimeNumber = Nothing
setCalculationStatusText("Поиск простого числа отменен")
Return
End If
'----------------------------------
'Удалось ли найти правильный ответ?
'----------------------------------
If (m_findNextPrimeNumber.getProcessingState = _
FindNextPrimeNumber.ProcessingState.foundPrime) Then
Timer1.Enabled = False
'Отобразить результат
setCalculationStatusText("Число найдено! Следующее простое число = " + _
m_findNextPrimeNumber.getPrime().ToString())
m_findNextPrimeNumber = Nothing
Return
End If
'--------------------------------------
'Вычисления продолжаются. Информировать
'пользователя о состоянии выполнения...
'--------------------------------------
'Получить два выходных значения
Dim numberCalculationsToFar As Long
Dim currentItem As Long
m_findNextPrimeNumber.getExecutionProgressInfo( _
numberCalculationsToFar, currentItem)
setCalculationStatusText("Вычисления продолжаются. Поиск в области: " + _
CStr(currentItem) + ". " + _
"Для вас выполнено " + CStr(numberCalculationsToFar) + _
" расчетов!")
End Sub
Листинг 9.5. Код класса FindNextPrimeNumber.csOption Strict On
Imports System
Public Class FindNextPrimeNumber
'Перечисляем возможные состояния
Public Enum ProcessingState
notYetStarted
waitingToStartAsync
lookingForPrime
foundPrime
requestAbort
aborted
End Enum
Private m_startPoint As Long
Private m_NextHighestPrime As Long
'Поиск какого количества элементов выполнен?
Private m_comparisonsSoFar As Long
'Для какого элемента сейчас выполняется поиск простого числа?
Private m_CurrentNumberBeingExamined As Long
'Вызывается для обновления информации о состоянии выполнения
Public Sub getExecutionProgressInfo( _
ByRef numberCalculationsSoFar As Long, _
ByRef currentItemBeingLookedAt As Long)
'ПРИМЕЧАНИЕ. Мы используем блокирование потока для уверенности в том,
'что эти значения не считываются во время выполнения операции
'их записи. Поскольку доступ к m_comparisonsSoFar
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!
Похожие книги на "Программирование мобильных устройств на платформе .NET Compact Framework"
Книги похожие на "Программирование мобильных устройств на платформе .NET Compact Framework" читать онлайн или скачать бесплатно полные версии.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Отзывы о "Иво Салмре - Программирование мобильных устройств на платформе .NET Compact Framework"
Отзывы читателей о книге "Программирование мобильных устройств на платформе .NET Compact Framework", комментарии и мнения людей о произведении.