private void TryResume()
        {
            lock (_suspendLock)
            {
                if (!_isSuspended)
                {
                    return;
                }

                _isSuspended = false;
                _suspendLock.PulseAll();
            }
        }
        private void ProcessEmulationStateMessage(EmulationStates newState)
        {
            this.AddInfoLog(LocalizedStrings.Str1121Params, State, newState);

            State = newState;

            switch (newState)
            {
            case EmulationStates.Stopped:
            {
                break;
            }

            case EmulationStates.Stopping:
            {
                SendInMessage(new DisconnectMessage());
                break;
            }

            case EmulationStates.Starting:
            {
                SendEmulationState(EmulationStates.Started);
                break;
            }

            case EmulationStates.Started:
            {
                _suspendLock.PulseAll();
                break;
            }

            case EmulationStates.Suspending:
            {
                SendEmulationState(EmulationStates.Suspended);
                break;
            }

            case EmulationStates.Suspended:
            {
                State = newState;
                _suspendLock.Wait();
                break;
            }

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Esempio n. 3
0
 /// <summary>
 /// Остановить эмуляцию.
 /// </summary>
 public void Stop()
 {
     SetEmulationState(EmulationStates.Stopping);
     _suspendLock.PulseAll();
 }