Ich habe eine WPF Anwendung, welche Diagramme darstellt. Diese Diagramme bestehen ihrerseits aus hunderten von WPF Elementen. Soll ein solches Diagramm ausgedruck werden, so wird das Diegramm erneut im Speicher erstellt, anschliessend nach XPS konvertiert und schliesslich an den Drucker gesendet. Dies funktioniert soweit immer.
Nun besteht jedoch bei manschen Windows 7 64 Bit Installationen das Problem, dass beim Drucken seltsame Probleme auftreten. Diese Probleme treten aber weder immer, noch zuverlässig reproduzierbar auf, sondern wirken zufällig. In etwa 3/4 aller Druckversuche (immer genau der gleiche Ablauf, das gleiche Diagramm) tritt einer der folgenden vier Fehler auf:
1. "SelecClipRgn failed". Tritt dieser Fehler auf, so wird die Anwendung direkt geschlossen. Es ist nicht möglich den Fehler im Code abzufangen auch nicht mit dem Debugger.
selectcliprgn.jpg
2. "Win32-Fehler: Das Handle ist ungültig." Dieser Fehler ist recht selten, kann jedoch abgefangen werden.
3. "{Int32 Polygon(Microsoft.Internal.GDIExporter.GdiSafeDCHa ndle, Microsoft.Internal.GDIExporter.PointI*, Int32)}" Auch diese Fehler kann abgefangen werden. Er enthält den folgenden Stack Trace:
-2147467259
bei Microsoft.Internal.GDIExporter.CNativeMethods.Poly gon(GdiSafeDCHandle hdc, PointI* pPoints, Int32 nCount)
bei Microsoft.Internal.GDIExporter.CGDIDevice.Polygon( PointI[] pPoints, Int32 offset, Int32 nCount)
bei Microsoft.Internal.GDIExporter.CGDIPath.Fill(CGDID evice dc, GdiSafeHandle brush)
bei Microsoft.Internal.GDIExporter.CGDIRenderTarget.Fi llPath(GeometryProxy geometry, Brush pFillBrush)
bei Microsoft.Internal.GDIExporter.CGDIRenderTarget.Dr awGeometry(Brush brush, Pen pen, Brush strokeBrush, Geometry geometry)
bei Microsoft.Internal.AlphaFlattener.BrushProxyDecomp oser.Microsoft.Internal.AlphaFlattener.IProxyDrawi ngContext.DrawGeometry(BrushProxy brush, PenProxy pen, Geometry geometry, Geometry clip, Matrix brushTrans, ProxyDrawingFlags flags)
bei Microsoft.Internal.AlphaFlattener.PrimitiveRendere r.DrawGeometry(Geometry cur, String desp, GeometryPrimitive gp)
bei Microsoft.Internal.AlphaFlattener.Flattener.AlphaR ender(Primitive primitive, List`1 overlapping, Int32 overlapHasTransparency, Boolean disjoint, String desp)
bei Microsoft.Internal.AlphaFlattener.Flattener.AlphaF latten(IProxyDrawingContext dc, Boolean disjoint)
bei Microsoft.Internal.AlphaFlattener.Flattener.Conver t(Primitive tree, ILegacyDevice dc, Double width, Double height, Double dpix, Double dpiy, Nullable`1 quality)
bei Microsoft.Internal.AlphaFlattener.MetroToGdiConver ter.FlushPage()
bei System.Windows.Xps.Serialization.NgcSerializationM anager.EndPage()
bei System.Windows.Xps.Serialization.NgcDocumentPageSe rializer.SerializeObject(Object serializedObject)
bei System.Windows.Xps.Serialization.NgcDocumentPagina torSerializer.SerializeObject(Object serializedObject)
bei System.Windows.Xps.Serialization.NgcSerializationM anager.SaveAsXaml(Object serializedObject)
bei System.Windows.Xps.XpsDocumentWriter.SaveAsXaml(Ob ject serializedObject, Boolean isSync)
bei System.Windows.Controls.PrintDialog.PrintDocument( DocumentPaginator documentPaginator, String description)
bei MyCompany.MyApp.Commands.UI.PrintPatientAnalysisVi ewCommand.Execute(Object parameter) in c:\tfs\MyApp\MyApp_Main\MyApp\Commands\UI\PrintPat ientAnalysisViewCommand.cs:Zeile 142.
4. Der häufigste Fehler ist jedoch folgender: Auf den ersten Blick hat alles funktioniert. Kein Absturz, keine Fehlermeldung. Wenn man sich dann jedoch das ausgedruckte Dokument ansieht, so ist in den meisten (nicht in allen!) Fällen nicht das komplette Dokument gedruckt worden, sondern es wurde an einer beliebigen stelle abgebrochen. Manchmal werden nur die ersten paar cm gedruckt, manchmal fast alles bis auf die letzten cm.
Hat jemand schon etwas ähnliches erlebt oder hat eine Idee, wie das Problem zu lösen wäre. Ich bin nun seit Tagen dran und habe keine Ideen mehr.
Danke und Gruss
Thomas
Nun besteht jedoch bei manschen Windows 7 64 Bit Installationen das Problem, dass beim Drucken seltsame Probleme auftreten. Diese Probleme treten aber weder immer, noch zuverlässig reproduzierbar auf, sondern wirken zufällig. In etwa 3/4 aller Druckversuche (immer genau der gleiche Ablauf, das gleiche Diagramm) tritt einer der folgenden vier Fehler auf:
1. "SelecClipRgn failed". Tritt dieser Fehler auf, so wird die Anwendung direkt geschlossen. Es ist nicht möglich den Fehler im Code abzufangen auch nicht mit dem Debugger.
selectcliprgn.jpg
2. "Win32-Fehler: Das Handle ist ungültig." Dieser Fehler ist recht selten, kann jedoch abgefangen werden.
3. "{Int32 Polygon(Microsoft.Internal.GDIExporter.GdiSafeDCHa ndle, Microsoft.Internal.GDIExporter.PointI*, Int32)}" Auch diese Fehler kann abgefangen werden. Er enthält den folgenden Stack Trace:
-2147467259
bei Microsoft.Internal.GDIExporter.CNativeMethods.Poly gon(GdiSafeDCHandle hdc, PointI* pPoints, Int32 nCount)
bei Microsoft.Internal.GDIExporter.CGDIDevice.Polygon( PointI[] pPoints, Int32 offset, Int32 nCount)
bei Microsoft.Internal.GDIExporter.CGDIPath.Fill(CGDID evice dc, GdiSafeHandle brush)
bei Microsoft.Internal.GDIExporter.CGDIRenderTarget.Fi llPath(GeometryProxy geometry, Brush pFillBrush)
bei Microsoft.Internal.GDIExporter.CGDIRenderTarget.Dr awGeometry(Brush brush, Pen pen, Brush strokeBrush, Geometry geometry)
bei Microsoft.Internal.AlphaFlattener.BrushProxyDecomp oser.Microsoft.Internal.AlphaFlattener.IProxyDrawi ngContext.DrawGeometry(BrushProxy brush, PenProxy pen, Geometry geometry, Geometry clip, Matrix brushTrans, ProxyDrawingFlags flags)
bei Microsoft.Internal.AlphaFlattener.PrimitiveRendere r.DrawGeometry(Geometry cur, String desp, GeometryPrimitive gp)
bei Microsoft.Internal.AlphaFlattener.Flattener.AlphaR ender(Primitive primitive, List`1 overlapping, Int32 overlapHasTransparency, Boolean disjoint, String desp)
bei Microsoft.Internal.AlphaFlattener.Flattener.AlphaF latten(IProxyDrawingContext dc, Boolean disjoint)
bei Microsoft.Internal.AlphaFlattener.Flattener.Conver t(Primitive tree, ILegacyDevice dc, Double width, Double height, Double dpix, Double dpiy, Nullable`1 quality)
bei Microsoft.Internal.AlphaFlattener.MetroToGdiConver ter.FlushPage()
bei System.Windows.Xps.Serialization.NgcSerializationM anager.EndPage()
bei System.Windows.Xps.Serialization.NgcDocumentPageSe rializer.SerializeObject(Object serializedObject)
bei System.Windows.Xps.Serialization.NgcDocumentPagina torSerializer.SerializeObject(Object serializedObject)
bei System.Windows.Xps.Serialization.NgcSerializationM anager.SaveAsXaml(Object serializedObject)
bei System.Windows.Xps.XpsDocumentWriter.SaveAsXaml(Ob ject serializedObject, Boolean isSync)
bei System.Windows.Controls.PrintDialog.PrintDocument( DocumentPaginator documentPaginator, String description)
bei MyCompany.MyApp.Commands.UI.PrintPatientAnalysisVi ewCommand.Execute(Object parameter) in c:\tfs\MyApp\MyApp_Main\MyApp\Commands\UI\PrintPat ientAnalysisViewCommand.cs:Zeile 142.
4. Der häufigste Fehler ist jedoch folgender: Auf den ersten Blick hat alles funktioniert. Kein Absturz, keine Fehlermeldung. Wenn man sich dann jedoch das ausgedruckte Dokument ansieht, so ist in den meisten (nicht in allen!) Fällen nicht das komplette Dokument gedruckt worden, sondern es wurde an einer beliebigen stelle abgebrochen. Manchmal werden nur die ersten paar cm gedruckt, manchmal fast alles bis auf die letzten cm.
Hat jemand schon etwas ähnliches erlebt oder hat eine Idee, wie das Problem zu lösen wäre. Ich bin nun seit Tagen dran und habe keine Ideen mehr.
Danke und Gruss
Thomas
Comment