Вам действительно нужно избавиться от них в финализаторе, если они уже были утилизированы иначе?
Или наоборот: разве вы не можете избавиться от них с помощью шаблона IDisposable?
Даже если это ресурс, который вы держите в течение всего срока службы вашего приложения, вы все равно можете использовать его:
static void Main()
{
using(var yourResource = ...)
{
...
yourMainForm.YourResource = yourResource;
Application.Run...
}
}
Редактировать: Помимо некоторых интересных ответов [1], пахнет, как будто что-то не так во всем этом.
Если в финализаторе происходит сбой из-за того, что ресурс уже удален, то где-то возникает проблема.
Если этот ресурс имеет решающее значение для правильной утилизации, то это должно быть сделано правильно.
Я не уверен, что "ссылка где-то в пользовательском интерфейсе" достаточно хороша.
Это не так сложно, чтобы получить права, даже если это делается в форме или около того. Вы можете переопределить расположение формы, компонента или контроллера, чтобы сделать это детерминистически.
[1] Может пригодиться, если он когда-нибудь укусит меня ...