【问题标题】:Access violation exception c#访问冲突异常 c#
【发布时间】:2012-11-14 17:30:27
【问题描述】:

这是我抛出异常的代码,它今天刚刚随机开始这里是照片:

这是整个页面的代码和错误异常:

 public frmWFDocumentDetail()
    {
        InitializeComponent();

        NavigationInTransition navigateInTransition = new NavigationInTransition();
        navigateInTransition.Backward = new TurnstileTransition { Mode = TurnstileTransitionMode.BackwardIn };
        navigateInTransition.Forward = new TurnstileTransition { Mode = TurnstileTransitionMode.ForwardIn };

        NavigationOutTransition navigateOutTransition = new NavigationOutTransition();
        navigateOutTransition.Backward = new TurnstileTransition { Mode = TurnstileTransitionMode.BackwardOut };
        navigateOutTransition.Forward = new TurnstileTransition { Mode = TurnstileTransitionMode.ForwardOut };
        TransitionService.SetNavigationInTransition(this, navigateInTransition);
        TransitionService.SetNavigationOutTransition(this, navigateOutTransition);

        DataContext = App.ViewModel_WFDocumentDetailItems;
    }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        //**this is how you pass parameters through to a new page**//
        string processID = "-1";
        string processName = "";
        NavigationContext.QueryString.TryGetValue("processID", out processID);
        NavigationContext.QueryString.TryGetValue("processName", out processName);

        App.ViewModel_WFDocumentHeaderItems.LoadData("johnny", processID);

        App.ViewModel_WFDocumentDetailItems.LoadData("johnny");

    }

和访问冲突:

System.AccessViolationException:试图读取或写入受保护的内存。这通常表明其他内存 已损坏。

我读过它,有人说它是 nvidia 网络管理器,有人说我必须设置一些设置,如 Suppress JIT optimization ,如果值没有改变则忽略 gpu 内存......但没有任何作用?任何人都可以请给我正确的方向吗?

根据要求,全栈

【问题讨论】:

  • 你能粘贴完整的堆栈吗?点击“查看详细信息”按钮,然后粘贴完整堆栈(混淆任何公司名称,或识别措辞)。该例外为您提供了最后一个“可步进”行,如果您转到“调试 -> 选项和设置 -> 调试 -> 常规 -> 仅启用我的代码”,您将停在实际位置。这可能是有答案和没有答案的区别。
  • 这张照片是你需要的吗? :)
  • 伙计,不要将堆栈发布为监视窗口的图片,那完全没用。相反,捕获异常,在其上调用ToString(),然后发布返回的文本。
  • @taylorjonl!那个设置太棒了!我对我得到的 xaml 错误采取了权利,这都是一个错过的“”,这是主要问题!
  • @Arrie,屏幕截图非常适合人类消费,但我们的编码人员喜欢文字......奇怪的是,我看到你的 StackTrace 为空,这意味着它无法遍历堆栈。通常会有一个值,它与消息和异常类型一起对调试异常至关重要。

标签: c# access-violation


【解决方案1】:

我使用了 taylorjohnl 给我的设置“调试 -> 选项和设置 -> 调试 -> 常规 -> 仅启用我的代码”,然后错误就直接出现在 xaml 中,这是一个语法错误,然后繁荣修复它并且应用程序再次运行:) 所以对我来说违反错误基本上是一个参考错误,希望这也可以帮助其他人,也可以使用 Silverlight 中的表达式混合来调试 UI 中的 xaml

【讨论】:

    【解决方案2】:

    我遇到了类似的问题,最终通过将故障转储提交给 MS 技术支持来解决。这是他们的回应:

    要点是崩溃是 Windows 操作系统附带的 comctl32.dll(Windows 通用控件)版本 5.0 中的一个已知错误。此错误不会在通用控件的 5.0 版中得到修复,因为该版本适用于 Windows XP 之前存在的应用程序。此后,它已在 comctl32.dll 的 6.0 版中得到修复,该版本包含在 Windows XP 及更高版本中。请注意,两个版本的 comctl32.dll(5.0 和 6.0)都包含在自 Windows XP 以来的每个 Windows 版本中。旧版本只是为了向后兼容非常旧的应用程序。

    要解决此问题,您需要更改应用程序以使其选择 comctl32.dll 的 6.0 版。在 Windows 窗体应用程序中,这是通过在应用程序启动时调用 Application.EnableVisualStyles 方法来完成的。如果您在 C# 项目中进行开发,则可以通过在应用程序入口点中的 Application.Run 调用之前添加调用来执行此操作。例如:

        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();   //Add this line
            Application.Run(new Form1());
        }
    

    如果您在 Visual Basic .Net 项目中,您可以通过转到您的项目属性,然后在应用程序属性页上选择“启用应用程序框架”和“启用 XP 视觉样式”复选框来选择加入。

    一旦你这样做,它应该解决这个特定的访问冲突。

    【讨论】:

      【解决方案3】:

      InitializeComponent() 中的代码是什么?其中有一些类引用 null,(主要是事件处理程序)。一旦触发,就会报告AccessViolation。

      【讨论】:

      • InitializeComponent 通常是处理 UI 初始化的生成代码。他没有更改此代码,除非他专门将文件系统导航到 .g.cs 文件进行更改。
      • 从您的图片中,错误看起来发生在那里。有时当您自己更改事件处理程序时,可能会导致此问题。
      猜你喜欢
      • 1970-01-01
      • 2022-01-07
      • 2016-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      相关资源
      最近更新 更多