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

ЖАНРЫ

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

Салмре Иво

Шрифт:

В приведенном в листингах 15.3, 15.4 и 15.6 коде показано, как организовать передачу содержимого файла с одного устройства на другое, используя IrDA. Для создания и запуска приложения необходимо выполнить следующие действия:

1. Запустите Visual Studio .NET (2003 или более позднюю версию) и выберите в качестве типа приложения C# Smart Device Application.

2. Выберите в качестве целевой платформы Pocket PC. (Для вас будет автоматически создан проект, и на экране появится окно конструктора форм Pocket PC.)

3. Добавьте в проект ссылку на System.NET.IrDA. По умолчанию ссылка на динамическую библиотеку System.NET.IrDA.DLL не включается в проект, поэтому ее необходимо добавить явно, чтобы соответствующее

пространство имен стало доступным для вашего приложения. 

Примечание. Библиотека System.NET.IrDA.DLL входит в основную часть .NET Compact Framework и присутствует на любом устройстве с установленной платформой .NET Compact Framework, только и того, что она не включается по умолчанию в проекты Visual .NET для устройств.

4. Добавьте в форму следующие элементы управления

 а) кнопку; переименуйте ее в buttonTestFileSend.

 б) кнопку; переименуйте ее в buttonTestFileReceive. 

5. Выполните по отношению к каждой из вышеупомянутых кнопок следующие действия. Дважды щелкните на кнопке в окне конструктора форм. Включите в сгенерированную функцию обработчика событий код button<ИмяКнопки>_Click из листинга 15.3.Примечание. Не забудьте включить также остальную часть кода из листинга 15.3, не входящую в определения обеих указанных функций

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. Вызвать функцию в асинхронном режиме и поручить

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

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