Литмир - Электронная Библиотека
Содержание  
A
A

 }

 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(

     out m_descriptionOfLastSendAttempt, ref streamOutToIrDA,

     ref irDASender, ref streamInFromFile);

   } catch (System.Exception eUnexpected) //Неожиданная ошибка!!!

   {

    setStatus(SendStatus.Finished_Error); //Отметить возникновение сбоя

    m_descriptionOfLastSendAttempt =

     "Unexpected error in IR send loop. " + eUnexpected.Message;

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

    //Освободить все распределенные нами ранее ресурсы

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

    if (streamOutToIrDA != null) {

     try {

      streamOutToIrDA.Close();

     } саtch{};//Поглотить любую ошибку

     streamOutToIrDA = null;

    }

    if (streamInFromFile != null) {

     try {

      streamInFromFile.Close();

     } catch{};//Поглотить любую ошибку

     streamInFromFile = null;

    }

    if (irDASender != null) {

     try {

      irDASender.Close();

197
{"b":"947732","o":1}