private void setStatus(ReceiveStatus newStatus) {

  //Обеспечить многопоточную безопасность для предотвращения

  //параллельного выполнения операций чтения/записи

  lock(this) {

   m_ReceiveStatus = newStatus;

  } //конец lock

 }

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

 // [in] filename: желаемое имя для входного файла IR

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

 public IrDAFileReceive(string filename, string irdaServiceName) {

  //Имя сокета IrDA, который мы хотим открыть

  m_IrDAServiceName = irdaServiceName;

  //Имя файла, в котором мы хотим сохранить полученные данные

  m_fileNameForDownload = filename;

 }

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

 //Обеспечивает асинхронный прием файла через IR

 //

 // [in] filename: имя файла, в который осуществляется запись

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

 public void WaitForIRFileDownloadAsync {

  //Заметьте, что сейчас мы находимся в режиме подготовки

  setStatus(ReceiveStatus.NotDone_SettingUp);

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

  //Создать новый поток

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

  System.Threading.ThreadStart threadEntryPoint;

  threadEntryPoint =

   new System.Threading.ThreadStart(WaitForIRFileDownload);

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

  //Запустить поток на выполнение

  newThread.Start;

 }

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

 //Открывает порт IR и ожидает загрузки файла

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

 public void WaitForIRFileDownload {

  System.IO.Stream outputStream = null;

  System.Net.Sockets.IrDAClient irdaClient = null;

  System.IO.Stream irStreamIn = null;

  try {

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

   //Задать и загрузить файл!

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

   internal WaitForIRFileDownload(ref outputStream,ref irdaClient, ref irStreamIn);

  } catch

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

  {

   setStatus(ReceiveStatus.Done_ErrorOccured);

  }

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

  //Освободить все ресурсы

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

  //Закрыть наш входной поток

  if (irStreamIn != null) {

   try {

    irStreamIn.Close;

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

  }

  //Закрытие клиента IrDA

  if (irdaClient != null) {

   try {

    irdaClient.Close;

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

  }

  //Закрыть файл, в который осуществлялась запись

  if (outputStream != null) {

   try {

    outputStream.Close;

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

  }

  //Закрыть прослушивающее устройство, если оно выполняется

  if (m_irListener != null) {

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

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