Программирование мобильных устройств на платформе .NET Compact Framework (Салмре) - страница 602

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

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

>  m_wasListenerStopped = True

>  Try

>   m_irListener.Stop()

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

>  End Try

>  m_irListener = Nothing

> End If

>End Sub


>Private Sub internal_WaitForIRFileDownload( _

> ByRef outputStream As System.IO.Stream, _

> ByRef irdaClient As System.Net.Sockets.IrDAClient, _

> ByRef irStreamIn As System.IO.Stream)

> '---------------------------------------------------------

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

> '---------------------------------------------------------

> 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 eListener As System.Exception

>  m_errorDuringTransfer = "Error creating listener - " + _

>   eListener.Message

>  GoTo exit_sub_with_error

> End Try

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

> If (m_wasListenerStopped = True) Then

>  GoTo exit_sub_with_abort

> End If


> '------------------

> 'Принять соединение

> '------------------

> Try

>  '--------------------------------------------------------------------

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

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

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

>  '--------------------------------------------------------------------

>  irdaClient = m_irListener.AcceptIrDAClient()

> Catch eClientAccept As System.Exception

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

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

>  'передано сюда.

>  If (m_wasListenerStopped = True) Then

>   GoTo exit_sub_with_abort

>  End If


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

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

>  m_errorDuringTransfer = "Error accepting connection - " + _

>   eClientAccept.Message

>  GoTo exit_sub_with_error

> End Try


> 'В этом месте возможны два состояния:

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

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

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

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