Gewusst wie: Debuggen und lösen eine 'DisconnectedContext' crash?
Ich habe eine GUI-app, die eine Verbindung zu einem sensor, der Daten sammelt und verarbeitet Sie im hintergrund mit BackgroundWorker
threads.
So wie es da steht bin ich Entsendung Daten auf der GUI mit Hilfe der ProgressChanged
die schien gut zu funktionieren zu beginnen. Ich habe seit steigerte die Daten, Preisen und haben entdeckt, ein problem, wenn die software laufen gelassen für ein paar Minuten, die Menge der Prozessor-Auslastung angezeigt wird, zur Rampe herauf, bis er in der Nähe von 100% auf beiden cores auf meinem Rechner und an diesem Punkt, ich bekomme eine Fehlermeldung die lautet:
Managed Debugging-Assistent 'DisconnectedContext' hat ein problem festgestellt in 'myapp.exe'. Zusätzliche Informationen: der Kontext 0xe2ba0 getrennt ist. Die Freigabe der Schnittstellen aus dem aktuellen Kontext (Kontext 0xe2d10). Dies kann dazu führen, Korruption oder Verlust von Daten.
Ich habe einige Sachen rund um das web, die suggeriert, dass dies passieren kann, wenn eine GUI app ist nicht in der Lage zu Pumpen, Nachrichten schnell genug. Ich habe bemerkt, ich kann das provozieren der gleiche Absturz passiert schneller, wenn ich die Größe des Fensters ändern sich rasch (d.h. Pumpe eine Last, mehr Nachrichten), unterstützt die Theorie, die ich denke?
Also die Fragen hier sind:
- Ob jemand stimmt mit meiner Hypothese über die Nachricht Pumpen?
- Ob es eine andere Erklärung?
- Gibt es eine Möglichkeit, ich kann es beweisen (peek die Anzahl der Nachrichten in der Warteschlange vielleicht)?
- Sind diese alle bad code smells, die vorschlagen, ich werde über dieses der falsche Weg ist?
Jede Beratung wäre sehr dankbar angenommen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Art der klingt wie ein sehr spezielles problem und ich denke, dass ist der Grund, warum niemand geantwortet hat, aber ich denke, ich kann helfen, auf Frage #3.
Spy++ sollte in der Lage sein zu sehen, die Nachrichten gehen, um Ihre Fenster. Ich denke, man könnte es verwenden, um zu sehen die Nachrichten, die Pumpe auf Ihrem GUI-und tun Sie Ihre Größenänderung test. Wenn Sie sah einen großen Anstieg der Meldungen versucht zu verarbeitet werden es vielleicht bestätigen Sie Ihre Hypothese.
Als ein beiseite, ich habe gelesen, dass Sie vielleicht in der Lage, ändern Sie den Haupt-thread aus der Wohnung STAThread zu MTAThread um diese MDA Weg.
Perphaps Sie ändern könnte, Ihre app zu spucken die sensor-Messwerte aus einer Datei oder Warteschlange Sie werden durch einen anderen Mechanismus, anstatt die Aktualisierung der GUI ständig.
HTH.
RichTextBoxControl
. Zwischen diesen beiden, es sieht aus wie ich haben das problem gelöst. Vielen Dank für die Anregungen.ProgressChanged
Anforderungen von den Daten-Produzenten-thread, um es für die Zuhörer.