2016-06-29 7 views
3
public bool IsConnected 
{ 
    get { return _tcpClient == null ? false : _tcpClient.Connected; } 
} 

ein wirftErste Ausnahme während Eigenschaft Connected auf Instanz TcpClient Lesen

„Objektverweis auf eine Instanz eines Objekts nicht festgelegt.“

bei

bei System.Net.Sockets.TcpClient.get_Connected() bei Project.ViewModel.ModbusOutputCounter.get_IsConnected() in C: ... \ ModbusOutputCounter.cs: Leitung 115

Wie ist das möglich und wie können wir verhindern, dass diese Ausnahme empfangen wird?

Edit:

gemäß SVK anwer das Problem bei der Entsorgung war, die intern in Close() Methode aufgerufen wird. Eine Abhilfe:

return _tcpClient?.Client != null ? _tcpClient.Connected : false; 
+0

es ist definitiv nicht in dieser Zeile? poste deinen Code – Rahul

+0

@Rahul Es ist definitiv in dieser Zeile. StackTrace zeigt nur zwei Methoden, die ich gepostet habe. – Goran

+0

Dann scheint '_tcpClient' null zu sein. Hast du den Code im Debugger durchgegangen? – Tim

Antwort

2

reference source for TcpClient Laut, Connected direkt zurück Connected der darunterliegenden Buchse. Dies bedeutet, dass ConnectedNullReferenceException wird, wenn der Socket null ist. Obwohl die Referenzquelle Skimming, fand ich zwei Fälle, in denen das geschehen kann:

  1. Wenn die TcpClientDispose d gewesen.
  2. Wenn Sie die ClientSocket explizit auf null festlegen.
+0

Danke, Close() -Methode ruft intern Dispose() auf, deshalb ist dies der Grund, warum dies geschah. Ein einfacher Workaround war, nach _tcpClient zu suchen? .Client! = Null? _tcpClient.Connected: false; – Goran

+0

Ich hatte das gleiche Problem wie du, das scheint ein Fehler zu sein. – Matthew

Verwandte Themen