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

ЖАНРЫ

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

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

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

public void LoopAndAttemptIRSend {

System.Net.Sockets.IrDAClient irDASender;

System.IO.Stream streamOutToIrDA;

System.IO.Stream streamInFromFile;

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

m_wasSenderStopped = false;

setStatus(SendStatus.AttemptingToSend);

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

//Непрерывное выполнение цикла, пока не удастся отправить сообщение

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

while(true) {

//Значения всех этих переменных должны быть нулевыми до и после

//вызова 'sendStream(...)', если не было сгенерировано исключение!

irDASender = null;

streamOutToIrDA = null;

streamInFromFile = null;

//Попытаться передать поток

bool bSuccess;

try {

bSuccess = sendStream(

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