我的WPF应用程序带有一些基于Viewport2DVisual3D的3D Rotator。
有时在某些生产PC上,程序会在系统线程中抛出异常。 非常经常产生异常 - 一个接一个10-20毫秒。此时UI线程没有响应,CPU占用25%的四核 - 所以1核满载,但操作系统没有生成"没有响应"申请。
Stacktrace
System.InvalidCastException:无法转换类型的对象 ' System.Windows.Media.Media3D.Viewport2DVisual3D'输入 ' System.Windows.Media.Visual&#39 ;. 在System.Windows.Documents.AdornerLayer.GetClipGeometry(Visual元素,Adorner adorner) 在System.Windows.Documents.AdornerLayer.UpdateElementAdorners(UIElement) 元件) 在System.Windows.Documents.AdornerLayer.UpdateAdorner(UIElement element) 在System.Windows.Documents.AdornerLayer.OnLayoutUpdated(Object sender,EventArgs args) 在System.Windows.ContextLayoutManager.fireLayoutUpdateEvent() 在System.Windows.ContextLayoutManager.UpdateLayout() 在System.Windows.ContextLayoutManager.UpdateLayoutCallback(Object arg) 在System.Windows.Media.MediaContext.InvokeOnRenderCallback.DoWork() 在System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks() 在System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget) 在System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget) 在System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback,Object args,Int32 numArgs) 在MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source,Delegate方法,Object args,Int32 numArgs,Delegate catchHandler)
任何想法可能出现问题以及如何找到这个地方?在开发PC上,这个问题没有重现,而且生产不是全部而且不稳定。
感谢。
更新
Viewport2DVisual3D仅在xaml中用作控件,在c#后面代码中用于此类动画
Storyboard.SetTarget(page3DYShowAnimation,page.GetV2DV3D()); Storyboard.SetTargetProperty(page3DYShowAnimation,new 的PropertyPath("(Viewport2DVisual3D.Transform)(Transform3DGroup.Children)[1](RotateTransform3D.Rotation)&#34));
ScaleTransform trans = new ScaleTransform(); page.GetRot3D()。RenderTransformOrigin = new Point(0.5,0.5); page.GetRot3D()。RenderTransform = trans; DoubleAnimation动画=新 DoubleAnimation(0.85,1,TimeSpan.FromMilliseconds(500)); trans.BeginAnimation(ScaleTransform.ScaleXProperty,anim); trans.BeginAnimation(ScaleTransform.ScaleYProperty,anim);
var storyboard = new Storyboard(); var pTimeline = new ParallelTimeline(); pTimeline.Children.Add(page3DYShowAnimation); pTimeline.Children.Add(pageSlideHideAnimation); storyboard.Children.Add(pTimeline); storyboard.Completed + = storyboard_Completed;
storyboard.Begin(page.GetCont3D(),true);
在storyboard_中完成了另外一些动画。