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

ЖАНРЫ

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

6. Установите для свойства MinimizeBox формы значение false. Благодаря этому во время выполнения в верхней правой части формы появится кнопка OK, с помощью которой вы легко сможете закрыть форму и выйти из приложения. Эта возможность оказывается очень полезной при многократном тестировании приложения.

7. Добавьте в проект новый класс, присвойте ему имя IrDAFileSend и введите в новый класс код из листинга 15.4.

8. Добавьте в проект новый класс, присвойте ему имя IrDAFileReceive и введите в новый класс код из листинга 15.5.

9. Разверните и запустите приложение на двух различных устройствах Pocket PC (или смартфонах).

10. Щелкните на первом устройстве Pocket PC на кнопке TestFileReceive. Вы должны увидеть в заголовке окна приложения текст, говорящий о том, что ожидается поступление файла.

11. Щелкните на втором устройстве Pocket PC на кнопке TestFileSend. Вы должны увидеть в заголовке окна приложения текст, говорящий о том, что ожидается устройство, которому следует переслать файл.

12. Направьте IrDA-порты двух устройств друг на друга. Файл должен передаться с одного устройства на другое, а на обоих устройствах должны отобразиться окна сообщений, тексты которых указывают на успешное завершение передачи данных.

Результат: файл, находящийся на втором устройстве Pocket PC, передается на первое устройство. Чтобы это проверить, запустите на Pocket PC приложение File Explorer, перейдите в корневой каталог My Device и щелкните на имени файла myTestReceiveFile; это приведет к открытию и отображению файла в приложении PocketWord. После успешного тестирования приложения в синхронном режиме, попробуйте вызвать функции IrDA, обеспечивающие передачу и прием файла в асинхронном режиме. Вам придется написать код для потоков пользовательского интерфейса обоих устройств, который будет периодически опрашивать состояние классов IrDAFileSend или IrDAFileReceive, чтобы определить момент завершения пересылки файла.

В настоящее время код, использующий сокеты IrDA .NET Compact Framework, будет выполняться на таких физических устройствах, оборудованных аппаратурой IrDA, как Pocket PC и смартфоны, но не будет правильно выполняться на эмуляторах

Если вы попытаетесь создать сокет IrDA или соединиться с ним при помощи кода, выполняющегося на эмуляторах Pocket PC, смартфона или Windows СЕ, то, вероятнее всего, в процессе выполнения вашего приложения сгенерируется исключение. Это означает, что, в отличие от большинства других средств .NET Compact Framework, проектировать и тестировать код для IrDA следует с использованием реального физического устройства. Хотя эта трудность и не является непреодолимой, процесс проектирования и тестирования приложения из-за этого усложняется, поскольку для тестирования кода, обеспечивающего работу с IrDA, вам потребуется два физических устройства, одно из которых действует в качестве IrDA-сервера, а второе — IrDA-клиента. Вследствие этой дополнительной сложности код для обмена данными через IrDA рекомендуется писать и тестировать отдельно от остальной части приложения с использованием максимально упрощенной модели приложения, чтобы исключить любые возможные просчеты в организации процесса передачи данных. После устранения всех возможных неполадок из кода, обеспечивающего работу с IrDA, его можно будет перенести в полную версию приложения.

Листинг 15.3. Тестовый код, который необходимо поместить в класс формы для тестирования передачи и приема данных посредством механизма IrDA

//Имя, которое мы хотим присвоить сокету IrDA

const string myIrDASocketName = "IrDaTestFileTransmit";

private void buttonTestFileSend_Click(object sender, System.EventArgs e) {

//Создать простой текстовый файл, который мы хотим передать

const string fileName = "\\myTestSendFile.txt";

System.IO.StreamWriter textFileStream;

textFileStream = System.IO.File.CreateText(fileName);

textFileStream.WriteLine("Today...");

textFileStream.WriteLine("is а nice day");

textFileStream.WriteLine("to go swim");

textFileStream.WriteLine("in the lake");

textFileStream.Close; IrDAFileSend irdaFileSend;

irdaFileSend = new IrDAFileSend(fileName, myIrDASocketName);

//Имеется 2 режима: 1 — Sync (синхронный), 2 — Async (асинхронный)

//1. Вызвать функцию в синхронном режиме

//и блокировать поток выполнения до тех пор,

//пока файл не будет передан

//1a. Вызвать функцию в синхронном режиме

//и блокировать поток выполнения до тех пор,

//пока файл не будет передан

this.Text = "Trying to send...";

//1b. Подождать, пока клиент не будет найден, а затем передать файл

irdaFileSend.LoopAndAttemptIRSend;

//1c. Информировать пользователя о том, что файл передан

System.Windows.Forms.MessageBox.Show("File sent!");

this.Text = "IrDA: Sent!";

//2. Вызвать функцию в асинхронном режиме и поручить

//передачу файла фоновому потоку

//irdaFileSend.LoopAndAttemptIRSendAsync;

//ПРИМЕЧАНИЕ: Если мы вызываем функцию в асинхронном режиме, то должны

//периодически проверять, не завершила ли она выполнение, путем

//вызова метода 'irdaFileSend.Status'

}

private void buttonTestFileReceive_Click(object sender, System.EventArgs e) {

//Если файл назначения уже существует, уничтожить его

const string fileName = "\\myTestReceiveFile.txt";

if (System.IO.File.Exists(fileName)) {

System.IO.File.Delete(fileName);

}

IrDAFileReceive irdaFileReceive;

irdaFileReceive = new IrDAFileReceive(fileName, myIrDASocketName);

//Имеется 2 режима: 1 - Sync (синхронный), 2 — Async (асинхронный)

//1. Вызвать функцию в синхронном режиме

//и блокировать поток выполнения до тех пор,

//пока файл не будет получен

//1a. Информировать пользователя о том, что мы ожидаем получения файла

this.Text = "Waiting to receive...";

//1b. Ожидать, пока не будет сделана попытка установления с нами связи

//и передачи файла

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