Но поскольку элемент управления находится на странице XAML, и мы не контролируем его время жизни, автор не получает возможности вызвать Dispose с чем-либо вроде оператора using. Поэтому автор решил вызвать Dispose в его обработчике Unloaded.
Но это источник моей проблемы. Представление, в котором находится этот элемент управления, может загружаться и выгружаться несколько раз. Я не контролирую его срок службы, это делает WPF, и WPF любит использовать его повторно. Таким образом, вызывается обработчик Unloaded, вызывается Dispose, который освобождает неуправляемые ресурсы, а затем тот же экземпляр загружается снова.
Из чтения Следует ли сделать IDisposable.Dispose() безопасным для многократного вызова? и во многих других темах, я всегда понимал следующее о реализации IDisposable:
- Вы всегда должны пытаться вызвать его самостоятельно
- Вы не должны иметь привычку вызывать его более одного раза
Или мне следует добавить финализатор к этому элементу управления, который вызывает Dispose за меня? Я не уверен, что это сработает, поскольку освобождаемые неуправляемые ресурсы необходимо (я думаю) освобождать в том же потоке пользовательского интерфейса, который их выделил.
Есть ли другой правильный подход?
Вот немного XAML элемента управления:
Подробнее здесь: https://stackoverflow.com/questions/798 ... -xaml-page
Мобильная версия