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

ЖАНРЫ

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

Салмре Иво

Шрифт:

 //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. Ожидать, пока не будет сделана попытка установления с нами связи

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

 irdaFileReceive.WaitForIRFileDownload;

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

 this.Text = "IrDA: received!";

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

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

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

 //irdaFileReceive.WaitForIRFileDownloadAsync;

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

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

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

}

Листинг 15.4. Класс IrDAIrDAFileSend

//====================================================================

//Этот класс является клиентом IrDA. Он осуществляет поиск сервера

//IrDA, имя которого совпадает с именем службы IrDA, и после того, как

//он найден, направляет ему поток данных файла.

//====================================================================

class IrDAFileSend {

 private string m_descriptionOfLastSendAttempt;

 private string m_IrDAServiceName;

 private string m_fileToSend;

 private bool m_wasSenderStopped;

 public enum SendStatus {

AttemptingToSend,

Finished_Successfully,

Finished_Aborted,

Finished_Error

 }

 private SendStatus m_SendStatus;

 public SendStatus Status {

get {

//Блокировка
выполнения параллельных операций чтения/записи в m_SendStatus

lock(this) {return m_SendStatus;}

}

 }

 private void setStatus(SendStatus newStatus) {

//Блокировка выполнения параллельных операций чтения/записи в m_SendStatus

lock(this) {m_SendStatus = newStatus;}

 }

 public string ErrorText {

get {return m_descriptionOfLastSendAttempt;}

 }

 //-----------

 //КОНСТРУКТОР

 //-----------

 public IrDAFileSend(string fileToSend,string irdaServiceName) {

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

m_IrDAServiceName = irdaServiceName;

//Файл, который мы хотим передать

m_fileToSend = fileToSend;

 }

 //--------------------------------------------------------------

 //Запускает новый поток для осуществления попытки отправки файла

 //--------------------------------------------------------------

 public void LoopAndAttemptIRSendAsync {

//Мы находимся в режиме передачи

setStatus(SendStatus.AttemptingToSend);

//Пользователь пока что не отменил выполнение операции

m_wasSenderStopped = false;

//Это функция, которую должен запустить на выполнение новый поток

System.Threading.ThreadStart threadEntryPoint;

threadEntryPoint = new System.Threading.ThreadStart(LoopAndAttemptIRSend);

//-----------------------------------

//Создать новый поток и запустить его

//-----------------------------------

System.Threading.Thread newThread = new System.Threading.Thread(threadEntryPoint);

newThread.Start; //Вперед!

 }

 //-----------------------------------------------------

 //Входит в цикл и пытается передать файл посредством IR

 //-----------------------------------------------------

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