Benutzer mit den meisten Antworten
Funktionsaufruf abbrechen

Frage
-
Hallo liebe Forumsbesucher,
für euch vielleicht eine einfache Frage.
Wie kann ich einen Funktionsaufruf abbrechen (z.B. unten angefügten), wenn er beispielsweise nach 1 Sekunde keinen Wert zurückgibt?
strName = Dns.GetHostEntry(tcpInfo.RemoteEndPoint.Address).HostName.ToString()
Vielen Dank.
VG Stefan
Antworten
-
Hallo Stefan
anstelle könnte man als anderen Ansatz manchmal asynchrone Varianten wie
Dns.BeginGetHostEntry
http://msdn.microsoft.com/de-de/library/system.net.dns.begingethostentry.aspx
http://msdn.microsoft.com/de-de/library/system.net.dns.endgethostentry.aspx
nutzen (ein 'Abbruch' gibt es nicht explizit, aber 'blockiert' wenigsten nicht).
Braucht etwas mehr an Logik,
und man muss hier ggf gewisse Multi-Threading -Bedingungen (im Callback) beachten.- Als Antwort vorgeschlagen Thorsten DörflerModerator Donnerstag, 7. Oktober 2010 20:37
- Als Antwort markiert maustiger30 Donnerstag, 7. Oktober 2010 20:38
Alle Antworten
-
Hallo Stefan,
ich kann aus Deinem Code leider nicht viel lesen. Zunächst solltest Du die Zeile einmal catchen:
Try strName = Dns.GetHostEntry(tcpInfo.RemoteEndPoint.Address).HostName.ToString() Catch ex As Exception MsgBox("get DNS: " & ex.Message) End Try
Und dann die TCP oder Http Instanz mittels property .timeout auf 1000 setzen. Das führt nach Verlauf größer 1000 ms auf den Catch.
Gruß Ellen
Ich benutze/ I'm using VB2008 & VB2010 -
Hallo Stefan
anstelle könnte man als anderen Ansatz manchmal asynchrone Varianten wie
Dns.BeginGetHostEntry
http://msdn.microsoft.com/de-de/library/system.net.dns.begingethostentry.aspx
http://msdn.microsoft.com/de-de/library/system.net.dns.endgethostentry.aspx
nutzen (ein 'Abbruch' gibt es nicht explizit, aber 'blockiert' wenigsten nicht).
Braucht etwas mehr an Logik,
und man muss hier ggf gewisse Multi-Threading -Bedingungen (im Callback) beachten.- Als Antwort vorgeschlagen Thorsten DörflerModerator Donnerstag, 7. Oktober 2010 20:37
- Als Antwort markiert maustiger30 Donnerstag, 7. Oktober 2010 20:38
-
Hallo Ellen,
strName = Dns.GetHostEntry(tcpInfo.RemoteEndPoint.Address).HostName.ToString()
Und dann die TCP oder Http Instanz mittels property .timeout auf 1000 setzen.
welche 'TCP' oder 'Http' Instanz meinst Du hier? Stefan möchte die Methode Dns.GetHostEntry verwenden, hier gibt es keinen Timeout, den man selber festlegen könnte.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de -
Hallo Ellen,
so sieht die Klasse aus:
#Region "Netzwerkverbindungen" ''' <summary> ''' In dieser Klasse werden im ListView alle TCP-Netzwerkverbindungen eingetragen. ''' </summary> Public Class AddRows ''' <summary> ''' Datenauflistung aller Spalten und Zeilen mit Daten vom Typ "Werte". ''' </summary> Public Shared Property Zeile As New ObservableCollection(Of Werte) ''' <summary> ''' Zählt alle TCP-Verbindungen. ''' </summary> Public Shared Property i As Int32 ''' <summary> ''' Informationen über die Netzwerkverbindungen. ''' </summary> Public Shared Property ipGlobal As IPGlobalProperties = IPGlobalProperties.GetIPGlobalProperties() ''' <summary> ''' TCP-Verbindungsinformationen. ''' </summary> Public Shared Property tcpInfoList As TcpConnectionInformation() = ipGlobal.GetActiveTcpConnections() ''' <summary> ''' Dem ListView Zeilen hinzufügen. ''' </summary> Public Sub NewRows() Dim strName, strIPR, strIPL, strStatus, strNetw, strPortR, strPortL As String ' Werte der Spalten. Dim tcpInfo As TcpConnectionInformation ' Alle aktiven TCP-Verbindungen. ' Alle TCP-Verbindungen auflisten. If i >= tcpInfoList.Length Then ' Alle TCP-Verbindungen wurden abgerufen. NetTraffic.t.Stop() ' Timer stoppen. Exit Sub ' Methode verlassen. End If tcpInfo = tcpInfoList(i) ' Alle TCP-Verbindungen nacheinander abrufen. i += 1 ' Potentielle nächste Verbindung. ' DNS-Name des Remote-Endpunkts, Status, Remote IP, Local IP, Netzwerk, Remote Port, Local Port. strName = GetName(tcpInfo.RemoteEndPoint.Address) strIPR = tcpInfo.RemoteEndPoint.Address.ToString strIPL = tcpInfo.LocalEndPoint.Address.ToString strStatus = tcpInfo.State.ToString strNetw = tcpInfo.RemoteEndPoint.AddressFamily.ToString strPortR = tcpInfo.RemoteEndPoint.Port.ToString strPortL = tcpInfo.LocalEndPoint.Port.ToString Zeile.Add(New Werte With {.Spalte1 = strName, _ .Spalte2 = strIPR, _ .Spalte3 = strIPL, _ .Spalte4 = strStatus, _ .Spalte5 = strNetw, _ .Spalte6 = strPortR, _ .Spalte7 = strPortL}) ' Zeile hinzufügen. End Sub ''' <summary> ''' Den DNS-Name der IP-Adresse ermitteln. ''' </summary> ''' <param name="IPAdrr">IP-Adresse.</param> ''' <returns>DNS-Name.</returns> Private Function GetName(ByVal IPAdrr As System.Net.IPAddress) As String ' Versuchen, den DNS-Name abzurufen. Try Return Dns.GetHostEntry(IPAdrr).HostName.ToString() Catch ex As Exception Return "" End Try End Function End Class ''' <summary> ''' Neuer Datentyp, der die Werte einer Zeile darstellt. ''' </summary> Public Class Werte Public Property Spalte1 As String Public Property Spalte2 As String Public Property Spalte3 As String Public Property Spalte4 As String Public Property Spalte5 As String Public Property Spalte6 As String Public Property Spalte7 As String End Class #End Region
VG Stefan
-
Ja, das hat Thomas in seinem Beitrag ja bereits gezeigt.
Hallo Thorsten,ich habe schon vieles in .NET gelernt und vor allen eines: Es gibt immer mehrere Wege zum Ziel. Deshalb würde ich die Möglichkeit hier mit Timeout zu arbeiten adhoc nicht ausschliessen. Ich würde es sogar fordern, gerade bei Netzwerkzugriffen. Allerdings muss ich hier passen. Mir fällt im Moment keine andere Lösung ein.
schöne Grüße Ellen
Ich benutze/ I'm using VB2008 & VB2010