示例#1
0
        protected bool WaitAny(
            WaitHandle[] events, out int occurredEventIndex, int timeout, IWaitController waitCtrl)
        {
            var eventsEx          = new WaitHandle[events.Length + 1];
            var disposeEventIndex = events.Length;

            events.CopyTo(eventsEx, 0);
            eventsEx[disposeEventIndex] = _disposeEvent;
            occurredEventIndex          =
                waitCtrl == null
                    ? WaitHandle.WaitAny(eventsEx, timeout)
                    : waitCtrl.WaitAny(eventsEx, timeout);

            return(occurredEventIndex != disposeEventIndex);
        }
示例#2
0
文件: Common.cs 项目: xoposhiy/KOIB
        private int SetIndicatorAndPlayPhrase(
            IWaitController waitController,
            WaitHandle[] waitedEventsDuringPlaying,
            EventWaitHandle playSoundFinishedEvent,
            string text, string[] sounds, bool silent)
        {
            if (!string.IsNullOrEmpty(text))
            {
                _logger.LogInfo(Message.WorkflowText, text);
                _scannerManager.SetIndicator(text);
            }
            var occurredEventIndex = -1;

            if (!silent)
            {
                ResetEvents(waitedEventsDuringPlaying);
                _soundManager.PlaySounds(sounds, (sender, e) => playSoundFinishedEvent.Set());
                try
                {
                    occurredEventIndex = waitController.WaitAny(waitedEventsDuringPlaying);
                    if (occurredEventIndex <= waitedEventsDuringPlaying.Length - 2)
                    {
                        _soundManager.StopPlaying();
                        return(occurredEventIndex);
                    }
                    occurredEventIndex = -1;
                }
                catch (ActivityExecutionInterruptException)
                {
                    _soundManager.StopPlaying();
                    _logger.LogVerbose(Message.WorkflowSoundPlayingStoppedByActivityExecutionInterrupt);
                    throw;
                }
            }
            return(occurredEventIndex);
        }
示例#3
0
 protected bool WaitAny( 
     WaitHandle[] events, out int occurredEventIndex, int timeout, IWaitController waitCtrl)
 {
     var eventsEx = new WaitHandle[events.Length + 1];
     var disposeEventIndex = events.Length;
     events.CopyTo(eventsEx, 0);
     eventsEx[disposeEventIndex] = _disposeEvent;
     occurredEventIndex =
         waitCtrl == null
             ? WaitHandle.WaitAny(eventsEx, timeout)
             : waitCtrl.WaitAny(eventsEx, timeout);
     return occurredEventIndex != disposeEventIndex;
 }
示例#4
0
文件: Common.cs 项目: nico-izo/KOIB
 private int SetIndicatorAndPlayPhrase( 
     IWaitController waitController, 
     WaitHandle[] waitedEventsDuringPlaying, 
     EventWaitHandle playSoundFinishedEvent, 
     string text, string[] sounds, bool silent)
 {
     if (!string.IsNullOrEmpty(text))
     {
         _logger.LogInfo(Message.WorkflowText, text);
         _scannerManager.SetIndicator(text);
     }
     var occurredEventIndex = -1;
     if (!silent)
     {
         ResetEvents(waitedEventsDuringPlaying);
         _soundManager.PlaySounds(sounds, (sender, e) => playSoundFinishedEvent.Set());
         try
         {
             occurredEventIndex = waitController.WaitAny(waitedEventsDuringPlaying);
             if (occurredEventIndex <= waitedEventsDuringPlaying.Length - 2)
             {
                 _soundManager.StopPlaying();
                 return occurredEventIndex;
             }
             occurredEventIndex = -1;
         }
         catch (ActivityExecutionInterruptException)
         {
             _soundManager.StopPlaying();
             _logger.LogVerbose(Message.WorkflowSoundPlayingStoppedByActivityExecutionInterrupt);
             throw;
         }
     }
     return occurredEventIndex;
 }