После выполнения метода Client.main выбрасывается исключение ObjectDisposedException (Доступ к ликвидированному объекту невозможен). Метод main предназначен для установления соединения с сервером, планируется использовать подключенный к серверу объект client в методах для отправки и получения данных на стороне клиента. Если я оберну код в блоке try в using, то ошибка исчезнет, но мне нужна возможность использовать данный TcpClient в других методах класса клиента.
Не понятна суть этой ошибки, почему объект TcpClient при выходе из метода main уничтожается, хотя он объявлен как член класса. Также непонятно, почему это исключение пропадает при закрытии сетевого потока и удалении экземпляра TcpClient в конце метода. Буду благодарен, если кто-то ответит на эти вопросы. В конце кода привел метод принятия запроса подключения на стороне сервера (метод Server.Listen).
internal static async void main() { try { client = new TcpClient(AddressFamily.InterNetwork); IPAddress ipAddress = IPAddress.Parse(Form1.frm1.textBox3.Text); await client.ConnectAsync(ipAddress, port); if (client.Connected) Form1.frm1.textBox2.AppendText("Подключение к серверу выполнено" + Environment.NewLine); stream = client.GetStream(); } catch (Exception ex) { Form1.frm1.textBox2.AppendText(ex.Message + Environment.NewLine); Disconnect(); } } static internal async void Listen() server = new TcpListener(localAddr, port); server.Start(); while (true) { try { if (server.Pending()) { TcpClient client = await server.AcceptTcpClientAsync(); ClientObjects clientObject = new ClientObjects(client); clientObject.Process(); } } catch (Exception e) { Form1.frm1.textBox2.BeginInvoke(new Action(() => { Form1.frm1.textBox2.AppendText(e.Message + Environment.NewLine); })); break; } }