Ну, удаление объекта используется для уничтожения ресурсов, которые вы не хотите удерживать, пока GC (в конце концов) не придет и не соберет ваш объект. Ваш метод удаления уничтожает все, что вам нужно в client_PreloadCompleted
?
Вы можете сделать так, чтобы объект располагался сам, когда произошли все ожидаемые обратные вызовы: сохраняйте «счетчик ссылок» для каждого ожидаемого обратного вызова и уменьшайте его для каждого происходящего обратного вызова - проверяйте нулевое значение в конце обработчика обратного вызова и утилизируйте, если поэтому.
Другой обходной путь: не беспокойтесь о IDisposable
. GC заберет ваш объект. Вы, вероятно, не хотите, чтобы обработчик обратного вызова (который может быть не запущен) имел критическое состояние. Он (обратный вызов) должен просто открыть любые ресурсы, которые ему нужны, когда он вызывается, и затем закрыть их.