要关闭TcpClient,必须关闭流。通常的做法是:
client.GetStream().Close();
client.Close();
所以单独使用client.Close()
是不够的,我的问题是client.Dispose()
是否与client.GetStream().Close()
相同,所以结束就像
client.Dispose();
client.Close();
这是我从阅读TcpClient reference source时所理解的,因为Dispose
方法关闭了流,所以我是正确的还是我错过了什么?先谢谢你。
答案 0 :(得分:7)
Close
来电Dispose
,Dispose
处理流:
IDisposable dataStream = m_DataStream;
if (dataStream != null)
{
dataStream.Dispose();
}
您不需要同时拨打Close
和Dispose
。选择一个。
您可以查看source code
IDisposable
类通常使用另一种与Dispose
相同的方法,但使用不同的特定于域的名称,这是很常见的。通常IDisposable.Dispose
是明确实施的,因此using
语句或演员表可以使用private void VegeListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
// If selected index is -1 (no selection) do nothing
if (VegeListBox.SelectedIndex == -1)
return;
//Make the selected item in the VegeListBox an instance of a Vegetable
Vegetable selectedVege = (sender as ListBox).SelectedItem as Vegetable;
// Navigate to the new page
if (selectedVege != null)
{
//Navigate to the Carrot page sending the ID property of the selectedVege as a parameter query
NavigationService.Navigate(new Uri(string.Format("/Carrot.xaml?parameter={0}", selectedVege.ID), UriKind.Relative));
}
// Reset selected index to -1 (no selection)
VegeListBox.SelectedIndex = -1;
}
,但不会使班级混乱。接口
答案 1 :(得分:0)
client.Dispose
或
client.Close
做同样的事情。一个电话就足够了
两者都关闭网络流
来自MSDN
调用此方法最终将导致关联的Socket关闭,并且还将关闭用于发送和接收数据的相关NetworkStream(如果已创建)。