我有一个WPF应用程序(Dotnet V4.5),它运行平稳3-4个小时,突然崩溃了。 我发现了一个异常,上面写着“Value不能为null;参数名称密钥”。 我的堆栈跟踪如下:
System.Collections.Dictionary'2.FindEntry(TKey key)at System.Collections.Generic.Dictionary'2.TryGetValue(TKey key, TValue&安培;价值) System.Windows.Controls.DataGridItemAttachedStorage.TryGetValue(对象 item,DependencyProperty属性,Object&价值) System.Windows.Controls.DataGridRow.RestoreAttachedItemValue(DependencyObject的 objectWithProperty,DependencyProperty属性)at System.Windows.Controls.DataGridRow.SyncProperties(布尔 forcePrepareCells)at System.Windows.Controls.DataGridRow.PrepareRow(Object item,DataGrid 拥有DataGrid) System.Windows.Controls.DataGrid.PrepareContainerForItemOverride(DependencyObject的 元素,对象项目) System.Windows.Controls.ItemsControl.MS.Internal.Controls.IGeneratorHost.PrepareItemContainer(DependencyObject的 容器,对象项目)at System.Windows.Controls.VirtualizingStackPanel.InsertContainer(的Int32 childIndex,UIElement容器,Boolean isRecycled)at System.Windows.Controls.VirtualizingStackPanel.AddContainerFromGenerator(的Int32 childIndex,UIElement child,BooleannewRealized,Boolean isBeforeViewport)at System.Windows.Controls.VirtualizingStackPanel.MeasureChild(IItemContainerGenerator&安培; 发电机,IContainItemStorage& itemStorageProvider, IContainItemStorage&安培; parentItemStorageProvider,Object& parentItem, 布尔和放大器; hasUniformOrAverageContainerSizeBeenSet,Double& computedUniformOrAverageContainerSize,Double& computedUniformOrAverageContainerPixelSize,Boolean& computedAreContainersUniformlySized,IList& items,Object&项目, IList的&安培;儿童,Int32& childIndex,Boolean& visualOrderChanged, 布尔和放大器; isHorizontal,Size& childConstraint,Rect&视, VirtualizationCacheLength&安培; cacheSize,VirtualizationCacheLengthUnit& cacheUnit,Boolean& foundFirstItemInViewport,Double& firstItemInViewportOffset,Size& stackPixelSize,Size& stackPixelSizeInViewport,Size& stackPixelSizeInCacheBeforeViewport, 大小和放大器; stackPixelSizeInCacheAfterViewport,Size& stackLogicalSize, 大小和放大器; stackLogicalSizeInViewport,Size& stackLogicalSizeInCacheBeforeViewport,Size& stackLogicalSizeInCacheAfterViewport,Boolean& mustDisableVirtualization,Boolean isBeforeFirstItem,Boolean isAfterFirstItem,Boolean isAfterLastItem,Boolean skipActualMeasure, Boolean skipGeneration,Boolean& hasBringIntoViewContainerBeenMeasured,Boolean& hasVirtualizingChildren)at System.Windows.Controls.VirtualizingStackPanel.MeasureOverrideImpl(大小 约束,Nullable'1& lastPageSafeOffset,List'1& previousMeasuredOffsets,Nullable`1& lastPagePixelSize,布尔值 重新测量 System.Windows.Controls.VirtualizingStackPanel.MeasureOverride(大小 约束) System.Windows.Controls.Primitives.DataGridRowsPresenter.MeasureOverride(大小 在System.Windows.FrameworkElement.MeasureCore(Size。)的约束 System.Windows.UIElement.Measure(Size。的availableSize) availableSize)at System.Windows.ContextLayoutManager.UpdateLayout()at System.Windows.ContextLayoutManager.UpdateLayoutCallback(Object arg)
在System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks()
在System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget)at System.Windows.Media.MediaContext.RenderMessageHandler(对象 resizedCompositionTarget)at System.Windows.Threading.ExceptionWrapper.InternalRealCall(代表 回调,对象args,Int32 numArgs)at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, 委托回调,Object args,Int32 numArgs,Delegate catchHandler)
我发现一个奇怪的事情是应用程序在某些机器上没有崩溃,但它在其他一些机器上崩溃。所以我把这两个文件转储,并注意到“PresentationCore.ni.dll”的版本是4.6.81.0并且CLR版本的系统是4.6.100.0这是关于我的应用程序连续7小时连续运行时没有崩溃的机器。
在崩溃的机器中,“PresentationCore.ni.dll”的版本为4.6.1055.0,CLR版本的系统为4.6.1055.0。
有人可以帮助我解决我的情况吗?我觉得我在这里错过了一些不了解的东西。