尝试读取或写入受保护的内存。这通常表明其他内存已损坏

2023-12-19

我真的不明白这个错误是如何在这段代码中发生的。请自行查看代码

    void dispatcherTimer_Tick(object sender, EventArgs e)
{
    string srUrl = lstLocalIndex[irLocalIndex] + lstMainIndex[irMainIndex].Replace("0;","");

    Task.Factory.StartNew(() =>
    {
        startNewWindow(srUrl);
    });

}


    void startNewWindow(string srUrl)
{
    NewWindowThread<TitleWindow, string>(c => new TitleWindow(c), srUrl);
}

现在这段代码就是错误发生的地方。我也会附上截图

        private void NewWindowThread<T, P>(Func<P, T> constructor, P param) where T : Window
    {
        Thread thread = new Thread(() =>
        {
            T w = constructor(param);
            w.Show();
            w.Closed += (sender, e) => w.Dispatcher.InvokeShutdown();
            try
            {
                System.Windows.Threading.Dispatcher.Run();
            }
            catch
            {

            }
        });
        thread.SetApartmentState(ApartmentState.STA);
        try
        {
            thread.Start();
        }
        catch
        {

        }
    }

这个错误会导致整个软件抛出错误并停止工作,即使我在新线程中调用它们:(

这行抛出错误System.Windows.Threading.Dispatcher.Run();

另请检查截图

C# 4.0 WPF


我一直在与一位客户解决这个问题,这就是我的发现。

我们正在开发一个 WPF 应用程序,该应用程序执行大量线程和后台工作处理。这个异常突然开始出现,我开始进行一些挖掘。经过大约一个小时的调查,我终于找到了罪魁祸首:

        var worker = new BackgroundWorker();
        worker.DoWork += (o, ea) => Dispatcher.BeginInvoke(new Action(() =>
        {
            //do some heavy processing here, plus UI work, then call another method.

            //inside that other method, I found this:
            var thread = new Thread(() =>
            {
                //do some heavy processing.
            }) { IsBackground = true };
            thread.Start();
        }));

似乎正在发生的事情是后台工作人员正在完成其工作并从执行中返回。但是,在该后台工作程序中创建的线程未完成处理,返回时仅发现创建它的线程已经超出范围,从而导致 AccessViolationException。

为了调试这个问题,我建议密切关注异常发生的位置并仔细检查您的调用堆栈,该堆栈可能已被破坏或丢失,具体取决于抛出异常时您是否位于线程内。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试读取或写入受保护的内存。这通常表明其他内存已损坏 的相关文章

随机推荐

  • 多个方法参数上的 @Cacheable 键

    来自弹簧文档 http static springsource org spring docs 3 1 0 M1 spring framework reference html cache html Cacheable value book
  • 如何在没有响应标头的情况下显式终止来自服务器的 http 连接

    我正在为我的一个客户端应用程序开发一个服务器模拟器 我正在使用 GlassFish 服务器 我必须在我的服务器应用程序中模拟 http 连接终止条件 有没有一种方法可以显式终止来自服务器端的连接 以便客户端不会收到任何响应标头 目前我已经尝
  • sudo pip 安装 django

    这是我第一次尝试安装 Django 当我运行它时 它成功安装了 Django 1 7 3 但我收到了下面的这些警告 我无法在网上找到任何有关它的信息 所以我希望有人能够澄清它们的含义 如果我需要修复它们 以及我该如何去做 谢谢 下面是我的终
  • 如何在 SwiftUI 中添加键盘工具栏,即使键盘不可见,该工具栏仍然保留

    我有一个聊天应用程序 想要在键盘上添加一个工具栏 类似于 SwiftUI 之前的 inputAccessoryView 我知道 iOS15 现在可以选择使用以下内容添加工具栏 来自 hackingwithswift toolbar Tool
  • bash:截断文件名,保持它们唯一

    我使用类似于此的 for 循环将文件夹中的所有文件名截断为 16 个字符 for i in do Shortname i 0 16 Let s assume I don t need the extension mv i Shortname
  • Playwright C# - 处理 Toast 消息

    我试图使用剧作家检查祝酒消息的内容 但找不到合适的方法来实现这一目标 剧作家文档列出了一种处理警报消息的合适方法 我可以使用该方法在解除警报之前检索警报中的文本内容 例如 Page Dialog dialog gt alertMessage
  • 图发生率列表实现

    我正在考虑图形数据结构实现 并正在查看 发生率列表 表示 这里有一个简单的描述 发生率列表 http en wikipedia org wiki Incidence list 因此图中的每个顶点都存储它所关联的边的列表 鉴于我的图是有向图
  • 使用 std::cout 正确地用零填充负整数

    我发现这个问题已经被问过 但每个人给出的答案都是 std cout lt lt std setw 5 lt lt std setfill 0 lt lt value lt lt std endl 这对于正数来说很好 但是对于 5 它会打印
  • 我可以在 Kubernetes Pod 中运行 Google Monitoring Agent 吗?

    看来谷歌监控代理 供电堆栈驱动程序 https cloud google com monitoring agent install agent应安装在每个Node 即每个计算实例 即每台机器 库伯内斯簇 然而新的plugins like N
  • 如何在 OAuth 同意屏幕中启用内部选项?

    当我尝试在 OAuth 同意屏幕中选择 内部 选项时 它告诉我 因为您不是G Suite用户 所以您只能制作您的应用 可供外部 一般受众 用户使用 我怎样才能启用这个选项 制作内部应用程序的唯一方法是从 gsuite 域帐户创建项目 通过您
  • 创建在 Aurelia 中使用依赖注入的类的新实例

    我想创建一个能够创建使用依赖注入的类 MyClass 实现抽象类 的新实例的工厂 我希望工厂看起来像这样 Factory export class Factory public static makeMyClass return new M
  • 导入错误:没有名为flask_wtf的模块

    我收到错误 ImportError No module named flask wtf 我尝试了所有可能的解决方案 我使用 安装了flask wrf flask bin pip install flask wtf Requirement a
  • Plotly:从悬停标签中隐藏“null”

    我有一个名为my customdata其中有一些nan价值观 当我绘制旭日图并将列表传递给customdata 它会根据需要显示值 但对于nan值 它反而显示0 如果我将 si 前缀设置与自定义数据一起传递 或null如果我没有传递自定义
  • 如何杀死一个javascript函数?

    示例代码 var isExecutionOver false myFunction function does some asynchronous stuff and sets isExecutionOver to true when th
  • 如何在Python 3中设置sys.stdout编码?

    在 Python 2 中设置默认输出编码是一个众所周知的习惯用法 sys stdout codecs getwriter utf 8 sys stdout 这包裹了sys stdout以 UTF 8 编码输出的编解码器编写器中的对象 然而
  • 为什么 `changes` 返回 `Event t (Future a)`

    The changes https hackage haskell org package reactive banana 0 8 0 2 docs Reactive Banana Frameworks html v changes函数有类
  • 使用 API REST 创建的 GitHub 机密但返回空

    我使用 GitHub REST API 创建了 GitHub 机密 如以下文档中所示 https docs github com en rest actions secrets https docs github com en rest a
  • 如何为 MySQL 表添加索引?

    我有一个非常大的 MySQL 表 包含大约 150 000 行数据 目前 当我尝试运行时 SELECT FROM table WHERE id 1 由于 ID 字段是主索引 因此代码运行良好 然而 对于该项目最近的发展 我必须通过另一个字段
  • Android - 用xml制作箭头形状

    我想为我的形状制作一个像这样的按钮 有没有办法用 xml 来做到这一点 就像设置一些点一样 就我而言 我有 5 你需要的是创建一个shape xml file在你的项目中drawable xxx文件夹 然后使用此形状作为按钮的背景 这是名为
  • 尝试读取或写入受保护的内存。这通常表明其他内存已损坏

    我真的不明白这个错误是如何在这段代码中发生的 请自行查看代码 void dispatcherTimer Tick object sender EventArgs e string srUrl lstLocalIndex irLocalInd