public override void Reset() { if (IsDisposed) { throw new ObjectDisposedException(GetType().Name); } _runningStatus = 0; lock (_lockObject) { int result = WindowsMultimediaDevice.midiOutReset(Handle); if (result != (int)EDeviceException.MmsyserrNoerror) { OnError(new ErrorEventArgs(new OutputDeviceException(result))); } while (_bufferCount > 0) { Monitor.Wait(_lockObject); } } }
protected override void Dispose(bool disposing) { if (disposing) { lock (_lockObject) { Reset(); int result = WindowsMultimediaDevice.midiOutClose(Handle); if (result != (int)EDeviceException.MmsyserrNoerror) { OnError(new ErrorEventArgs(new OutputDeviceException(result))); } } } else { WindowsMultimediaDevice.midiOutReset(Handle); WindowsMultimediaDevice.midiOutClose(Handle); } base.Dispose(disposing); }