BinaryReader has always had what I consider a design flaw in the way it implemented IDisposable. Even since the early days of .NET, the BinaryReader constructors have required a stream. To me this means that the BinaryReader has a dependency on the stream thus something else is responsible for that stream’s lifecycle. The problem is that when the BinaryReader was disposed it would also close the Stream!
It took until .NET 4.5 but Microsoft finally gave us a way to address this issue in the form of a third constructor overload. With this constructor we can now specify whether we want to close the provided stream or leave it open.