Was bewirkt, dass Windows in dieser WPF-Multifunktionsleistenanwendung hängenbleibt

8

Wir hatten einige Probleme mit einer ziemlich großen und komplexen Desktop-Anwendung, bei der die Verwendung von Microsoft Ribbon für WPF (oder eine Kombination von damit verbundenen Dingen) dazu führt, dass der Computer hängen bleibt.

Der unten aufgeführte Code scheint eine Windows-Hang-Situation auf einer Reihe von Computern auszulösen. Manche Computer werden dieses Problem jedes Mal erleben, manche werden es nie erfahren. Das hängt, auf einigen Computern die gesamte Sitzung sperren (einschließlich Num-Sperre und Feststelltaste), aber in anderen, die Maus wird immer noch bewegen (Num-Sperre noch aus dem Geschäft). Wenn der Computer nicht mehr reagiert, scheint es, dass Remote-Anmeldung und Netzwerkfreigabe weiterhin funktionieren, es ist jedoch nicht möglich, die Konsolensitzung zu beenden.

Kurz gesagt, was die Hauptursache für das Verhalten zu sein scheint, ist die Kombination einiger Dinge:

  • Microsoft Ribbon für WPF
  • Windows Forms-Anwendung, die das WPF-Steuerelement in einem ElementHost hostet
  • Die Verwendung von doppelt gepufferten Windows Forms (unter Verwendung von CreateParams)
  • Die Verwendung von Software-Rendering im WPF-Ribbon

Wir haben dieses Problem später gelöst, indem wir WS_EX_COMPOSITED nur für einige ausgewählte Formulare verwenden, aber ich möchte sehr gerne die Ursache für dieses Problem herausfinden.

Ich muss noch einen einfachen Weg finden, den Hang zu reproduzieren, aber diese minimale Anwendung scheint das Geschäft zumindest auf einigen Rechnern zu erledigen, indem ich etwas maximiere / wiederherstelle und die Maus über das Band schwebe Knopf.

Der folgende Code wird als x86 .NET 4.0 gegen das Microsoft WPF Ribbon .NET 4.0-Bibliothek.

%Vor%     
torkildr 04.07.2013, 15:26
quelle

2 Antworten

1

Überprüfen Sie, ob die Grafiktreiber auf den betroffenen Computern aktuell sind. WPF funktioniert sehr anders als herkömmlicher GDI-Code, daher können manchmal unzuverlässige Treiber die Art von Problem verursachen, das Sie beschreiben.

    
Olly 26.08.2013 12:47
quelle
1

Wie Sie festgestellt haben, kommt das Problem bei Composite Windows. Ich habe das Problem weiter analysiert und es scheint sich um ein Betriebssystemproblem zu handeln:

Siehe Der Fall des langsamen WPF-Renderings in einer WinForms-Anwendung

Zwei Threads versuchen, jedes andere Fenster in einer Schleife zu rendern und zu entwerten, wobei auf einem Thread das zusammengesetzte Winforms-Fenster rendert und auf dem anderen Thread der WPF-Render-Thread dasselbe tut. Dies geschieht auf Win 7 - Win 10 Maschinen, solange das Software-Rendering aktiv ist.

Es sieht wie ein DWM-Problem (Desktop Window Manager) aus, bei dem nur die MS-Experten uns sagen können, ob WPF oder WinForms einen impliziten Vertrag verletzen oder ob es sich um einen einfachen DWM-Fehler handelt.

    
Alois Kraus 29.02.2016 07:55
quelle