App hängt sich beim Laden von tDS-Daten auf

  • VB.NET
  • .NET 4.5

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    App hängt sich beim Laden von tDS-Daten auf

    Hallo zusammen,

    ich habe eine verzwickte Situation: Ich habe in meinem Projekt eine bisher funktionierende Client-"Server-App"-Verbindung über TCP/IP. Der Client fordert Daten an und sobald er sie vom Server erhält, wird ein Event nebenläufig gefeuert, welches die gelieferten Daten enthält. Soweit so langweilig und bisher auch gut laufend. Bei einem Testprojekt habe ich aber etwas entdeckt, bei dem ich nicht mehr durchblicke. Ich konnte nach langer Fehlersuche und Umbauten, die kaum noch was mit der Client-Server-Verbindung zu tun hat, es auf folgende, sonderbare Situation eindampfen:
    • Ich lese im Event nur eine gültige XML-Datei ein und übergebe die Daten an ein tDS (typisiertes DataSet) per ReadXML.
    • Sind es wenige Daten (< 7 Datensätze, je bestehend aus einer Int32-ID und einem String), geht es. Es bestehen keine Contraint-Probleme.
    • Bei mehr Daten hängt sich die App auf - aber nur, sofern sie als eigenständige EXE gestartet wird! In Visual Studio 2017 CE gestartet läuft die App auch mit mehr Daten.
    • Wird die Datei nicht im nebenläufigen Event geladen, läuft es auch bei vielen Daten in der eigenständigen EXE.
    Ich interpretier das alles als Symptome. Aber die Ursache finde ich nicht. Was kann ich noch machen, um das eigentliche Problem zu identifizieren? Oder kann mir jemand sagen, was ich falsch mache?

    ##########

    OK, ich konnte das Problem auf einen Punkt reduzieren - den ich aber immer noch nicht verstehe.
    Die Daten landen in einem tDS. Ein DGV ist daran gekoppelt.

    Jetzt kommt's:
    Ist die DGV-SmartTag-Option »Hinzufügen« (Property AllowUserToAddRows) aktiviert, hängt sich die EXE beim Daten-Laden auf. Ist sie deaktiviert, läuft die App. WTF ?(
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()

    @NoIde: explizit Threads: nein, Nebenläufigkeit mit Tasks bzw. Async/Await: ja. Denn?
    @VB1963: Hab ich auch schon mal probiert, leider kein Erfolg: Vor Start der Event-auslösenden Funktion: BindingSource.SuspendBinding(); nach dem Laden, im Hauptthread: BindingSource.ResumeBinding()

    ##########

    Es klappt zwar, dass ich zu Beginn oder im Designer AllowUserToAddRows auf False setze und nach Laden der Daten wieder auf True, aber das ist eher ein Umgehen eines noch nicht von mir erkannten Problems und hat was von "und immer schön dran denken" - was früher oder später dann doch untergeht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()

    Tja, was soll ich sagen: Anbei ein zusammengesetzter Screenshot. Links in VS ausgeführt, rechts als EXE. Rechts eben das klassische Formular-ist-nicht-mehr-ansprechbar-Verhalten.

    Langsam schein ich aber dem Problem näher zu kommen. Im Zuge der Screenshoterstellung wollte ich natürlich das alles ein wenig schöner aussehen lassen. Da ist mir aufgefallen, dass nicht die Option AllowUserToAddRows das Problem ist, sondern die Tatsache, dass, wenn durch das Datenhinzufügen das Aussehen des DGVs geändert wird, nämlich das Hinzukommen von Scrollbars, sich die Exe aufhängt. Dass nebenläufige Aufgaben nicht die CEs des Main-Threads explizit ändern dürfen, ist mir klar. Aber hier wird das DGV-CE ja implizit durch den Datenimport verändert. Und dies scheint das Problem zu sein. Wenn das stimmt, na dann vielen Dank.

    ##########

    Verflucht, das kann es aber auch nicht (nur) sein, da meine anderen Apps, die mit dem gleichen Aufbau versehen sind, problemlos auch als selbständige EXE laufen :cursing:

    ##########

    Anbei mal das ganze minimalistisch. Ist das DGV groß genug, läuft's. Ansonsten rebelliert (anscheinend nur) die EXE.
    Dateien
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „VaporiZed“ ()

    Bist du sicher gegangen, dass die EXE alle notwendigen Files (Falls welche vorhanden sind) im selben Ordner zur Verfügung hat?

    Ansonsten weiß ich jz auf die Schnelle auch net weiter.

    LG
    Bitte benutze OPTION STRICT ON.
    Und optional OPTION EXPLICIT ON.
    Hier ein CODE-CONVERTER.

    Suchanfragen-Ansatz für GOOGLE.
    Prüfe deinen Beitrag in einer RECHTSCHREIBPRÜFUNG.

    Wie Du dem Projektupload entnehmen kannst: ja.
    Sonst würden sich zweifellos irgendwelche FileNotFound-, DllLinker- oder andere Exceptions zeigen.

    ##########

    Es wird immer mysteriöser. Habe eine meiner »funktionierenden« Apps hergenommen und im Laufe der Fehlersuche ein Duplikat des dortigen DGVs erstellt. Danach hängt sich die EXE auf. Nehm ich das DGV-Duplikat raus, läuft es wieder. Habe die DGV-Daten in der Designer.VB verglichen. Alles Relevante gleich (außer Position und TabIndex). Habe auch eine der DGV-Spalten vom Original ins geleerte Duplikat verschoben, um auszuschließen, dass es an den Spalteneinstellungen liegt. Funktioniert auch nicht.
    Und noch verrückter: Wenn ich CheckForIllegalCrossThreadCalls = False anfangs einschalte, funktioniert auch die App in VS nicht mehr. Umgekehrt hätte es für mich Sinn ergeben, also dass nun die EXE läuft. Aber dass sie mit diesem no-go-Befehl nicht mehr in VS läuft, überfordert mich.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „VaporiZed“ ()

    VB1963 schrieb:

    Löse beim Laden der Daten die Bindung zum DGV und nachher nimmst du sie wieder auf...
    BindingSource.SuspendBinding() reicht da nicht hin.
    Tatsächlich habich keine Ahnung, was das macht.
    Ich verwende folgende Extension:

    VB.NET-Quellcode

    1. <Extension()> _
    2. Public Sub ListChangedEnabled(bs As BindingSource, value As Boolean)
    3. bs.RaiseListChangedEvents = value
    4. If value Then bs.ResetBindings(False)
    5. End Sub
    Ok, ich hab zwar keine Ahnung, warum RaiseListChangedEvents mein Problem löst, aber es funktioniert.
    Das Rätsel mit dem funktionierenden Erst-DGV ist zwar immer noch ungelöst, aber wurscht.
    Bist Du auf die Lösung damals per Trial-and-Error drauf gekommen oder durch entsprechende Recherche?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Na ganz toll. Einmal, weil es durch die Prüfung flutscht und ein anderes mal, weil es sich erst zeigt, wenn die Scrollbars sichtbar werden.
    Herzlichsten Dank, das Wochenende ist (für den Moment) gerettet.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.