Tôi đang gửi luồng tới các phương thức để viết và trong các phương pháp đó tôi đang sử dụng trình đọc/ghi dữ liệu nhị phân. Khi người đọc/nhà văn được xử lý, hoặc bằng using
hoặc chỉ khi nó không được tham chiếu, thì luồng cũng đã đóng chưa?Không xử lý streamreader đóng luồng?
Tôi sẽ gửi một BinaryReader/Writer, nhưng tôi đang sử dụng một StreamReader quá (có lẽ tôi nên đi xung quanh đó. Tôi chỉ sử dụng cho GetLine và ReadLine). Điều này là khá rắc rối nếu nó đóng dòng mỗi lần một nhà văn/đọc được đóng lại.
oh tốt, nó chỉ xảy ra khi gọi Vứt bỏ, không phải khi được cho là hoàn thiện. – Nefzen
@Nefzen: Đó là bởi vì không có gì đảm bảo thứ tự các đối tượng của bạn sẽ được hoàn thành. Nếu cả StreamReader và Luồng cơ bản đều đủ điều kiện để hoàn thành, GC có thể hoàn tất luồng trước tiên - sau đó trình tạo luồng sẽ không có tham chiếu đến luồng. Vì lý do này, bạn chỉ có thể phát hành các tài nguyên không được quản lý bên trong một finalize (ví dụ, một FileStream đóng cửa sổ của nó xử lý trong finalize của nó). Oh, và tất nhiên, nếu bạn không bao giờ vứt bỏ, luồng vẫn sẽ được thu thập cuối cùng (và tập tin đã đóng). Nó chỉ là một thực tế rất xấu để không vứt bỏ một dòng. – JMarsch
Làm tổ này làm cho trình phân tích mã VS khiếu nại: 'CA2202: Microsoft.Usage: Object 'stream' có thể được xử lý nhiều lần trong phương thức '...'. Để tránh tạo ra một System.ObjectDisposedException bạn không nên gọi Dispose nhiều hơn một thời gian trên một đối tượng.' Nếu đó chỉ là bỏ qua? Tôi đã không nhận được bất kỳ trường hợp ngoại lệ cho đến nay ... –