2016-08-11 3 views
-2

, когда я использую объект StreamSocket и возвращаю свойство IInputStream или IOutputStream в код клиентов. Эти интерфейсы наследуются от IDisposable. И при вызове метода Dispose, я ожидаю, какой экземпляр StreamSocket будет удален. Но ничего не происходит, а TCP-соединение не закрывается. Что делает метод Dispose, когда объект передается на один из этих интерфейсов? Спасибо.Dispose IInputStream

+2

GC не является детерминированным, поэтому его нельзя сразу удалить. Во-вторых, мы понятия не имеем, как вы вызываете dispose, поэтому, возможно, этот метод даже не вызван .... –

+0

Как вы знаете, что соединение не закрывается? – Steve

ответ

0

Утилизация флагов объекта, доступного для сбора мусора. Если автор объекта, который был закрыт в потоке из метода Dispose, вы можете или не можете сразу увидеть поток.

0

Ждут, подождите. Вы получаете IInputStream и IOutputStream. Почему вы ожидаете, что вызов Dispose на этих объектах, которые вы получили из свойств, должен закрыть соединение StreamSocket? Вызовите Dispose непосредственно на объекте StreamSocket.

+0

Держу пари, что вызов dispose on streams обеспечивает очистку этих потоков и их закрытие. Но я не уверен, что после этого вы не сможете повторно использовать одно и то же соединение. –

+0

Хорошо. Что делает метод Dispose при перемещении объекта StreamSocket на один из этих интерфейсов? – Serg

+0

Извините, но я не могу вас понять. StreamSocket _can not_ будет передан в IInputStream или IOutputStream, потому что класс StreamSocket не реализует эти итерации. 'streamSocketObject is IInputStream' -> всегда' false' 'streamSocketObject is IOutputStream' -> всегда' false' Насколько я вижу, единственными интерфейсами, к которым вы можете применить объект типа StreamSocket, являются 'IDisposable',' IStreamSocket', 'IStreamSocket2'. И вызов toc Dispose on IDisposable удаляет одноразовый StreamSocket (и закрывает соединение). –

Смежные вопросы