Я пытаюсь реализовать одноэлементный класс, содержащий внутри него объект com. Класс реализует интерфейс IDisposable, но когда я пытаюсь реализовать метод финализации, я получаю исключение из доступа к ком-объекту из другого потока.Завершение объекта COM
Это происходит потому, что clr использует другой поток при завершении объектов.
Есть ли способ реализовать такую вещь или, может быть, я просто делаю что-то неправильно?
Вы сказали, что вам нужно всего лишь реализовать финализатор, если ваш класс напрямую управляет не управляемым ресурсом. Вы также должны реализовать финализатор, если ваш класс содержит любой объект, который реализует IDisposable. – dewald
hm давайте рассмотрим примеры Я использую Office.Interop для доступа к возможностям проверки орфографии Word , когда я закончил, мне нужно закрыть Word-приложение, поэтому я внедрил класс, содержащий экземпляр WordApplication, и хочу, чтобы он метод закрытия вызова при удалении или завершении, а проблема не в ресурсах, а в вызове метода закрытия экземпляра текстового приложения –
@dewald: неверно. В этом случае реализуйте IDisposable, чтобы позволить вызывающим абонентам очищаться без ожидания GC. Но вы * не нуждаетесь в финализаторе: GC завершит вашу привязку к исходным ресурсам для ссылок (это является следствием правила, которое в финализаторе вы не можете использовать ссылочные управляемые объекты, потому что GC, возможно, уже уничтожил их). – Richard