gpt4 book ai didi

c# - 程序崩溃后如何挂起所有线程?

转载 作者:太空狗 更新时间:2023-10-29 23:18:55 24 4
gpt4 key购买 nike

我有一个未处理的异常处理程序。它显示了一个漂亮的 GUI,并允许用户发送错误报告。用户甚至可以留下他们的姓名和电话号码等,我们的支持部门会给他们回电。效果好,看起来不错,让顾客不那么生气。理论上,无论如何。

问题是我的应用程序使用后台线程,并且线程似乎并不关心是否在 GUI 线程上抛出异常(这是有道理的),它们只是继续工作。如果用户让我的自定义异常处理程序窗口保持打开足够长的时间,最终会弹出一个 WER 对话框,使其看起来像错误处理程序本身崩溃了。

我无权访问异常处理程序范围内的线程对象,因此无法挂起它们。使线程对象全局可访问也不是解决方案。我现在的解决方法是在我的异常处理程序中使用类似 Globals.Crashed = true; 的东西,并让我的线程方法在每次循环迭代时检查该属性。不完美,但它可以最大限度地减少损害。

有没有人知道一个不那么hacky的方法?我的方法错了吗?我是否必须像 WER 那样执行并启动一个暂停主程序并显示错误 UI 的外部程序?

最佳答案

如果你有一个未处理的、未知的异常,你可以假设任何事情都发生了,你的程序可能无法做哪怕是最简单的事情。考虑例如如果它已消耗所有可用内存 - 那么您也将无法发送错误报告,因为它可能需要分配内存。

一个好的方法是编写一个单独的 小应用程序来进行错误报告。该应用程序可以从文件中获取要报告的详细信息。这样您的未知异常处理程序将:

  • 将信息转储到临时目录中的文件中。
  • 以文件名作为参数启动错误报告应用。
  • 在失败的进程做蠢事之前终止它。

错误报告应用程序应删除临时文件。

关于c# - 程序崩溃后如何挂起所有线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3534363/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com