Benutzer mit den meisten Antworten
Wie kann denn das gehen? ArgumentOutOfRangeException...

Frage
-
Guten Abend,
ich habe hier ein seltsames Phänomen, was ich einfach nicht "unterbinden" kann. Während If MeineListe.Count > 0 noch funktioniert, bekomme ich in der nächsten Zeile knallhart serviert "Index ist außerhalb des Bereichs", was aber nachweislich nicht stimmt.
Ich habe mal einen Screenshot gemacht:
rs kommt durch eine For-Each-Schleife in einer Liste. In dieser Liste, befindet sich u.a. die MessageQueue-Liste. Ich frage also explizit vorher nach, ob noch mindestens eine Nachricht in der Liste ist. Antwort ist ja. Im nächsten Moment ziehe ich diese Nachricht raus und lege diese in die Variable m ab. Und genau da knallt es dann. Der Knaller ist nur, in m ist die Nachricht drin, wie man im Screenshot sehen kann.
Wie geht das? Und wie stelle ich das ab? Mit SyncLock z.B. nicht.
Kennt jemand das Phänomen und hat vielleicht eine Lösung? Der Fehler kommt natürlich "irgendwann" einmal. Auch ein Versuch mit dem Try-Catch-Block schlug fehl.
Gruß
Andy
Antworten
-
Hallo Andy,
was genau ziehst Du wo und auf welche Art "raus".
Änderst Du das Array, welches Du für den Schleifendurchlauf verwendest? Falls ja, solltest Du das vermeiden. Und falls doch, nicht mit ForEach, sondern mit einer Zählschleife und da am besten von hinten nach vorne durchgehen und immer nur das letzte Element entfernen.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert AndreasMahub Mittwoch, 13. Dezember 2017 06:35
Alle Antworten
-
Hallo Andy,
was genau ziehst Du wo und auf welche Art "raus".
Änderst Du das Array, welches Du für den Schleifendurchlauf verwendest? Falls ja, solltest Du das vermeiden. Und falls doch, nicht mit ForEach, sondern mit einer Zählschleife und da am besten von hinten nach vorne durchgehen und immer nur das letzte Element entfernen.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert AndreasMahub Mittwoch, 13. Dezember 2017 06:35
-
Guten Morgen Stefan,
ja, leider wird das Array geändert. Nachdem ich mein Post abgeschickt habe, fiel mir kurze Zeit später ein, dass es einen weiteren Thread gibt, der auf ausgehende Nachrichten prüft, diese Nachricht dann sendet und anschließend diese Nachricht aus dem Array nimmt.
Habe es jetzt mit einer zusätzlichen Funktion lösen können:
Public Function GetNextInboundMessage() As MessageBase Dim res As MessageBase = Nothing Try Dim messageList = From x In MessageQueue Where x.MessageType = MessageBase.MessageTypeEnum.Inbound If Not messageList Is Nothing Then If messageList.Count > 0 Then res = messageList.First End If End If Catch ex As Exception End Try Return res End Function
Die aufrufende Routine prüft dann ob Nothing oder nicht. Das scheint wohl zu funktionieren, jedenfalls länger als sonst (läuft jetzt eine Viertelstunde). Ich lasse es mal bis heute Abend durchlaufen, mal sehen ob es immer noch läuft wenn ich von Arbeit komme :-)
Gruß
Andy