NullReferenceException von PresentationFramework.dll

8

Ich kämpfe mit einer seltsamen NullReferenceException, die scheinbar von der GetNameCore () Funktion der ItemAutomationPeer Klasse.

Die Details der Ausnahme sind unten, aber der wirklich interessante Aspekt ist, dass es nicht auf meinem Entwicklungscomputer mit Windows 7 oder anderen Windows 7-Computern, mit denen wir getestet haben, auftritt. Es passiert nur auf meinem Windows 8 Pro Testgerät.

Die Ausnahme wird offensichtlich ausgelöst, wenn versucht wird, eine Zelle in einem WPF DataGrid-Steuerelement zu bearbeiten.

Ich habe versucht, den ganzen Tag ohne Erfolg zu verfolgen. Ich habe versucht, den Prozess remote mit Visual Studio zu debuggen und durch den Code zu gehen, aber keiner der Benutzercodes scheint die Ausnahme auszulösen. Es wird offensichtlich von einer Sequenz von Ereignissen innerhalb der PresentationFramework.Dll ausgeführt und die Ausnahme blubbert durch die AppDomain und stürzt schließlich die Anwendung ab.

Wenn jemand an etwas denken kann, das das verursacht, oder einen Weg, es zu beheben, würde es wirklich helfen.

%Vor%     
Mike Dinescu 26.04.2013, 21:47
quelle

1 Antwort

8

Nach einer Menge Hin-und-Her mit dem Remote-Debugger und nahezu erfolglosen Online-Suchen konnte ich das Problem auf ein paar fehlerverzeihende ItemAutomationPeer Instanzen.

Als ich auf dieses Problem stieß, hatte ich kein Wissen über UI Automation und wie es im WPF-Framework unterstützt wird. In der Tat, als AutomationPeer mich aus irgendeinem Grund an COM Interop denken ließ, jagte ich für eine Weile das falsche Thema. Wenn Sie dies lesen und nicht wissen, welche UI-Automatisierung hier und hier könnte Ihnen eine Idee geben, was UI-Automatisierung bedeutet der Kontext von WPF.

In meinem Fall stellte sich heraus, dass der Grund dafür, dass die Anwendung auf dem Windows 8-Testcomputer abstürzte, aber auf meinem Entwicklungscomputer (und zahllosen anderen Computern, auf denen es bereitgestellt wurde) auf Windows 8 funktionierte auf der Maschine wurde eine Art von UI-Accessibility-Anwendung (oder einem anderen UI-Automatisierungsclient) ausgeführt. Sobald ich die Narrator-Anwendung auf meinem Windows 7-Entwicklungscomputer gestartet habe, konnte ich die App zum Absturz bringen.

Nachdem ich das Grundproblem verstanden hatte, war ich immer noch nicht in der Lage, weiter zu debuggen, um genau herauszufinden, welches Steuerelement das Problem verursachte, aber mehr online zu lesen schien in die allgemeine Richtung der benutzerdefinierten Steuerelemente zu zeigen und so begann ich einen Eliminierungsprozess um festzustellen, welche benutzerdefinierten WPF-Steuerelemente schuld waren. Ich habe zwei benutzerdefinierte Steuerelemente gefunden - eines, das ein DataGrid erweitert, und ein anderes, das eine ListBox erweitert hat.

Schließlich bestand die Lösung des Problems in meinem Fall darin, benutzerdefinierte Klassen zu erstellen, die die ItemsControlAutomationPeer Basisklasse und diese als Automatisierungs-Peers auf jedem der benutzerdefinierten Steuerelemente bereitzustellen, die Probleme durch Überschreiben der OnCreateAutomationPeer Methode.

%Vor%

Wo die ControlSpecificCustomAutomationPeer-Klasse mindestens so aussieht:

%Vor%     
Mike Dinescu 27.04.2013, 20:49
quelle

Tags und Links