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

   //Установить первым, чтобы код, выполняющийся другим потоком,

   //был отменен, если он установлен

   m_wasListenerStopped = true;

   try {

    m_irListener.Stop;

   } catch {} //Поглотить любые возникающие ошибки

   m_irListener = null;

  }

 }


 private void internal_WaitForIRFileDownload(

  ref System.IO.Stream outputStream,

  ref System.Net.Sockets.IrDAClient irdaClient,

  ref System.IO.Stream irStreamIn) {

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

  //Открыть входной файл для направления в него потока данных

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

  outputStream = System.IO.File.Open(m_fileNameForDownload, System.IO.FileMode.Create);

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

  //ОБНОВЛЕНИЕ СОСТОЯНИЯ

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

  setStatus(ReceiveStatus.NotDone_WaitingForSender);


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

  //Открыть прослушивающее устройство

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

  try {

   m_wasListenerStopped = false;

   m_irListener = new System.Net.Sockets.IrDAListener(m_IrDAServiceName);

   m_irListener.Start;

  } catch (System.Exception eListener) {

   m_errorDuringTransfer = "Error creating listener - " + eListener.Message;

   goto exit_sub_with_error;

  }


  //Проверить, не поступила ли команда отменить выполнение

  if (m_wasListenerStopped == true) {

   goto exit_sub_with abort;

  }


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

  //Принять соединение

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


  try {

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

   //Выполнение будет приостановлено здесь до тех пор, пока устройство не

   //начнет передавать информацию, или не будет остановлен объект

   //прослушивания, выполняющийся в другом потоке)

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

   irdaClient = m_irListener.AcceptIrDAClient;

  } catch (System.Exception eClientAccept) {

   //Если прослушивание остановлено другим потоком, инициировавшим отмену

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

   //передано сюда.

   if (m_wasListenerStopped == true) {

    goto exit_sub_with_abort;

   }

   //Если прослушивание не было прекращено,

   //то произошло иное исключение. Обработать его.

   m_errorDuringTransfer = "Error accepting connection - " + eClientAccept.Message;

   goto exit sub_with error;

  }

  //B этом месте возможны два состояния:

  //#1: Мы получили соединение от передающего устройства IR

  //#2: IR-запрос был отменен (кто-то вызвал функцию STOP)

  // (в этом случае приведенный ниже код сгенерирует исключение)

  //Проверить, не было ли отменено выполнение

  if (m_wasListenerStopped == true) {

   goto exit_sub_with_abort;

  }


Перейти на страницу:

Похожие книги

Программист-прагматик. Путь от подмастерья к мастеру
Программист-прагматик. Путь от подмастерья к мастеру

Находясь на переднем крае программирования, книга "Программист-прагматик. Путь от подмастерья к мастеру" абстрагируется от всевозрастающей специализации и технических тонкостей разработки программ на современном уровне, чтобы исследовать суть процесса – требования к работоспособной и поддерживаемой программе, приводящей пользователей в восторг. Книга охватывает различные темы – от личной ответственности и карьерного роста до архитектурных методик, придающих программам гибкость и простоту в адаптации и повторном использовании.Прочитав эту книгу, вы научитесь:Бороться с недостатками программного обеспечения;Избегать ловушек, связанных с дублированием знания;Создавать гибкие, динамичные и адаптируемые программы;Избегать программирования в расчете на совпадение;Защищать вашу программу при помощи контрактов, утверждений и исключений;Собирать реальные требования;Осуществлять безжалостное и эффективное тестирование;Приводить в восторг ваших пользователей;Формировать команды из программистов-прагматиков и с помощью автоматизации делать ваши разработки более точными.

Эндрю Хант , Дэвид Томас , А. Алексашин

Программирование / Книги по IT
Разработка ядра Linux
Разработка ядра Linux

В книге детально рассмотрены основные подсистемы и функции ядер Linux серии 2.6, включая особенности построения, реализации и соответствующие программны интерфейсы. Рассмотренные вопросы включают: планирование выполнения процессов, управление временем и таймеры ядра, интерфейс системных вызовов, особенности адресации и управления памятью, страничный кэш, подсистему VFS, механизмы синхронизации, проблемы переносимости и особенности отладки. Автор книги является разработчиком основных подсистем ядра Linux. Ядро рассматривается как с теоретической, так и с прикладной точек зрения, что может привлечь читателей различными интересами и потребностями.Книга может быть рекомендована как начинающим, так и опытным разработчикам программного обеспечения, а также в качестве дополнительных учебных материалов.

Роберт Лав

Программирование, программы, базы данных / Программирование / Книги по IT