public override void Parse() { try { Open(); FirstPassParse(); foreach (var p in parsers) { p.globaTempos = globalTempos; p.PrepareForSecondPass(); } SecondPassParse(); MidiLength = parsers.Select(p => p.trackSeconds).Max(); foreach (var p in parsers) { p.Dispose(); } parsers = null; globalTempos = null; trackBeginnings = null; trackLengths = null; MidiFileReader.Dispose(); MidiFileReader = null; GC.Collect(); cancel.ThrowIfCancellationRequested(); LastColorEvent = new int[trackcount * 16]; SetColors(); ParseFinishedInvoke(); } catch (OperationCanceledException) { MidiFileReader.Close(); MidiFileReader.Dispose(); ParseCancelledInvoke(); } }