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(

     out m_descriptionOfLastSendAttempt, ref streamOutToIrDA,

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

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