Có cách nào để loại bỏ khỏi phương thức Dispose, hay nói cách khác là không loại bỏ A khi gọi A.Dispose().
gia hạnTôi không giải thích rõ lắm vì tôi không nghĩ ra cách nào hay để diễn đạt. Những gì tôi có là một lớp hiển thị thanh tiến trình (vùng chọn) trong cửa sổ bật lên chạy trong một chuỗi riêng biệt. Khi tạo cửa sổ bật lên tiến trình, một đối tượng dùng một lần tương tự như Bộ điều khiển sẽ được trả về, vì vậy chúng ta có thể thực hiện việc này:
sử dụng (var Progress = Dialogs.ShowProgress("Xin vui lòng đợi..."))
{
// làm rất nhiều thứ ở đây
Progress.UpdateStatus("Xin vui lòng đợi thêm...");
// làm nhiều thứ hơn
}
Khi khối sử dụng thoát ra, cửa sổ tiến trình sẽ bị đóng và hủy.
Bây giờ tôi gặp tình huống những gì xảy ra trong khối này cũng tạo ra một cửa sổ tiến trình, thay vì trả về một đối tượng mới và tạo một cửa sổ mới, tôi muốn trả về phiên bản đầu tiên của đối tượng đã tạo và chỉ loại bỏ nó trong phiên bản đầu tiên.
gia hạnĐược rồi, những gì tôi đã làm là cho mỗi Dialogs.ShowProgress()
Cuộc gọi tạo một đối tượng IDisposable mới và gắn đối tượng Controller gốc vào nó. Các đối tượng này được giải phóng khi hoàn thành, trong khi Controller chỉ được giải phóng khi đó là đối tượng duy nhất được giải phóng.
Như những người khác đã nói, được thực hiện theo cách có thể không thực sự giải phóng ID dùng một lần
là một ý tưởng tồi. Đây là một cách khác để đạt được điều bạn muốn làm:
giao diện ICó thể dùng một lần
{
bool TryDispose(); // trả về false nếu việc xử lý bị hủy
}
Bạn có thể sử dụng nó như thế này:
I MaybeDisposable có lẽ = //thứ gì đó
thử
{
// làm điều gì đó với có thể
}
finally
{
nếu (có thể.TryDispose())
// vâng, nó đã được xử lý!
khác
// hm, nó không làm được việc gì khác;
}
Tôi là một lập trình viên xuất sắc, rất giỏi!