仅限VISTA上的AccessViolationException

时间:2011-01-16 09:25:43

标签: c# wpf winforms

我有一个WPF / Winforms应用程序在XP上运行得非常好,以及Win 7.但是在Vista上,有时只有 - 可能是我看到这个时间的20-30%:

非常感谢任何帮助

Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.AccessViolationException
Stack:
   at MS.Win32.PresentationCore.UnsafeNativeMethods+WICImagingFactory.CreateDecoderFromStream(IntPtr, IntPtr, System.Guid ByRef, UInt32, IntPtr ByRef)
   at System.Windows.Media.Imaging.BitmapDecoder.SetupDecoderFromUriOrStream(System.Uri, System.IO.Stream, System.Windows.Media.Imaging.BitmapCacheOption, System.Guid ByRef, Boolean ByRef, System.IO.Stream ByRef, System.IO.UnmanagedMemoryStream ByRef, Microsoft.Win32.SafeHandles.SafeFileHandle ByRef)
   at System.Windows.Media.Imaging.BitmapDecoder.CreateFromUriOrStream(System.Uri, System.Uri, System.IO.Stream, System.Windows.Media.Imaging.BitmapCreateOptions, System.Windows.Media.Imaging.BitmapCacheOption, System.Net.Cache.RequestCachePolicy, Boolean)
   at System.Windows.Media.Imaging.BitmapImage.FinalizeCreation()
   at System.Windows.Media.Imaging.BitmapImage.EndInit()
   at System.Windows.Forms.Integration.Convert.ToSystemWindowsMediaImagingBitmapImage(System.Drawing.Image)
   at System.Windows.Forms.Integration.ElementHostPropertyMap.UpdateBackgroundImage(System.Windows.Forms.Integration.ElementHost)
   at System.Windows.Forms.Integration.ElementHostPropertyMap.BackgroundPropertyTranslator(System.Object, System.String, System.Object)
   at System.Windows.Forms.Integration.PropertyMap.RunTranslator(System.Windows.Forms.Integration.PropertyTranslator, System.Object, System.String, System.Object)
   at System.Windows.Forms.Integration.PropertyMap.OnPropertyChanged(System.Object, System.String, System.Object)
   at System.Windows.Forms.Integration.ElementHost.OnPropertyChanged(System.String, System.Object)
   at System.Windows.Forms.Integration.ElementHost.UpdateBackground()
   at System.Windows.Forms.Integration.ElementHost.OnVisibleChanged(System.EventArgs)
   at System.Windows.Forms.Control.OnParentVisibleChanged(System.EventArgs)
   at System.Windows.Forms.Control.OnVisibleChanged(System.EventArgs)
   at System.Windows.Forms.ScrollableControl.OnVisibleChanged(System.EventArgs)
   at System.Windows.Forms.Control.OnParentVisibleChanged(System.EventArgs)
   at System.Windows.Forms.Control.OnVisibleChanged(System.EventArgs)
   at System.Windows.Forms.ScrollableControl.OnVisibleChanged(System.EventArgs)
   at System.Windows.Forms.Control.OnParentVisibleChanged(System.EventArgs)
   at System.Windows.Forms.Control.OnVisibleChanged(System.EventArgs)
   at System.Windows.Forms.ScrollableControl.OnVisibleChanged(System.EventArgs)
   at System.Windows.Forms.Form.OnVisibleChanged(System.EventArgs)
   at System.Windows.Forms.Control.SetVisibleCore(Boolean)
   at System.Windows.Forms.Form.SetVisibleCore(Boolean)
   at System.Windows.Forms.Control.set_Visible(Boolean)
   at WeifenLuo.WinFormsUI.Docking.DockContentHandler.SetVisible()
   at WeifenLuo.WinFormsUI.Docking.DockPane.set_ActiveContent(WeifenLuo.WinFormsUI.Docking.IDockContent)
   at WeifenLuo.WinFormsUI.Docking.DockContentHandler.Activate()
   at WeifenLuo.WinFormsUI.Docking.DockContentHandler.Show(WeifenLuo.WinFormsUI.Docking.DockPanel, WeifenLuo.WinFormsUI.Docking.DockState)
   at WeifenLuo.WinFormsUI.Docking.DockContent.Show(WeifenLuo.WinFormsUI.Docking.DockPanel, WeifenLuo.WinFormsUI.Docking.DockState)
   at MyApp.MainForm.OpenVisualSqlDesigner(Boolean, ToolkitUI.Model.Table)
   at MyApp.Commands.TableCommands.VisualDesignerCommand.Execute()
   at MyApp.Commands.CommandToolstripMenuItem.OnClick(System.EventArgs)
   at System.Windows.Forms.ToolStripItem.HandleClick(System.EventArgs)
   at System.Windows.Forms.ToolStripItem.HandleMouseUp(System.Windows.Forms.MouseEventArgs)
   at System.Windows.Forms.ToolStripItem.FireEventInteractive(System.EventArgs, System.Windows.Forms.ToolStripItemEventType)
   at System.Windows.Forms.ToolStripItem.FireEvent(System.EventArgs, System.Windows.Forms.ToolStripItemEventType)
   at System.Windows.Forms.ToolStrip.OnMouseUp(System.Windows.Forms.MouseEventArgs)
   at System.Windows.Forms.Control.WmMouseUp(System.Windows.Forms.Message ByRef, System.Windows.Forms.MouseButtons, Int32)
   at System.Windows.Forms.Control.WndProc(System.Windows.Forms.Message ByRef)
   at System.Windows.Forms.ScrollableControl.WndProc(System.Windows.Forms.Message ByRef)
   at System.Windows.Forms.ToolStrip.WndProc(System.Windows.Forms.Message ByRef)
   at System.Windows.Forms.Control+ControlNativeWindow.OnMessage(System.Windows.Forms.Message ByRef)
   at System.Windows.Forms.Control+ControlNativeWindow.WndProc(System.Windows.Forms.Message ByRef)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr, Int32, IntPtr, IntPtr)
   at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG ByRef)
   at System.Windows.Forms.Application+ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr, Int32, Int32)
   at System.Windows.Forms.Application+ThreadContext.RunMessageLoopInner(Int32, System.Windows.Forms.ApplicationContext)
   at System.Windows.Forms.Application+ThreadContext.RunMessageLoop(Int32, System.Windows.Forms.ApplicationContext)
   at System.Windows.Forms.Application.Run(System.Windows.Forms.Form)

3 个答案:

答案 0 :(得分:1)

当应用程序尝试创建BitmapImage时,似乎发生了此异常,是否可能是您的系统阻止或锁定对加载图像所需的特定文件的访问?

答案 1 :(得分:1)

WIC,您在堆栈跟踪顶部看到的是WPF的基础映像库。它是一个用C ++编写的COM组件。对于使用AccessViolation进行炸弹的非托管代码,是不常见的。您可以通过启用非托管代码调试并启用Microsoft Symbol Server来从堆栈跟踪中获取更多信息。

然而,在这个问题上施加任何影响的可能性都不大。你可以调整的唯一旋钮是图像本身,它可能会以一种使代码炸弹的方式腐败。并确保在计算机上安装了Service Pack 1。除此之外,您还需要Microsoft支持人员的帮助。他们需要一个崩溃程序的小模块和造成麻烦的图像。

答案 2 :(得分:0)

非常感谢 - 非常有帮助。打开非托管代码调试导致我的问题是“这表明内存在其他地方已损坏”。由于我没有太多记忆,我知道它一定是被引用的外部dll之一。事实证明,ICSharpCode.TextEditor.dll是问题的根源,并更新到它的最新版本修复它!!!