Согласно действующему C #, должны ли все классы, использующие неуправляемый код, реализовывать как IDisposable, так и финализатор.
Нет, речь идет об использовании неуправляемых ресурсов , а некод.В Windows ресурсы почти всегда представлены «ручками».Сам по себе неуправляемый код не является ресурсом, с ним не связан ни один объект ядра, кроме дескриптора DLL, дескриптора, к которому у вас нет доступа.
Аргумент, передаваемый в SetForegroundWindow, действительно является одним изэти ресурсы.Это ручка к окну.Но вы не создали это окно самостоятельно, вы пытаетесь установить фокус на какое-то окно, которое уже было создано и управляется другим кодом.Вы должны не распоряжаться объектами, которые вы не создавали.
Примечательно также и то, что рекомендации устарели.Дескрипторы Windows должны быть обернуты одним из производных классов SafeHandle.Они уже предоставляют финализатор, вы не должны реализовывать свой собственный.Просто внедрите Dispose () и вызовите метод SafeHandle.Dispose ().