public MidiInterface( IOptions <Options> options, ILogger <MidiInterface> logger, IMidiMessageSerializer serializer) { this.logger = logger; this.serializer = serializer; Messages = Observable.FromEventPattern <OnReceivedMidiMessageDelegate, MidiMessage>( h => MessageReceived += h, h => MessageReceived -= h) .Select(o => o.EventArgs); receiver = new Thread(ReceiverThread); port = new TeVirtualMidi(options.Value.PortName); running = true; receiver.Start(); }
public void Dispose() { if (running) { running = false; // Shutting down the port is the only way to unlock // the reading call in receiver thread. port.Shutdown(); receiver.Join(); } if (port != null) { port.Dispose(); port = null; } }