У меня нет опыта в кодировании приложений DirectShow на C #, но большой опыт в C ++.
DirectShow основан на технологии COM, которая использует подсчет ссылок, чтобы определить, когда используется объект.
Например, для представления IGraphBuilder будет использоваться COM-объект.
В C ++ нам пришлось бы деконструировать граф, удалив все его фильтры, а затем освободить граф.
Я понимаю, что в C # есть своя собственная сборка мусора и т. Д., Но если вы явно не освободите используемые вами объекты, они останутся в памяти.
Из приведенного вами кода видно, что график все еще открыт, хотя воспроизведение, возможно, закончилось. В этом случае он будет содержать ссылку на файл, который вы воспроизвели, что объясняет, почему вы не можете удалить его - например, файл заблокирован от чтения.
Надеюсь, это направит вас в правильном направлении!