从StackTrace中指出错误位置-多线程

Pointing out Location of Error from StackTrace-Multiple Threads

我有以下代码可以在 winforms 应用程序

中使用 Program.cs 文件捕获未处理的异常
 private static void OnGuiUnhandedException(object sender, System.Threading.ThreadExceptionEventArgs e)
        {             
            MessageBox.Show(e.Exception.Message);
            MessageBox.Show(e.Exception.StackTrace.ToString());
            MessageBox.Show(e.Exception.TargetSite.ToString());               
            Application.Exit();
        }

我正在使用 images.I 不断收到此异常

Object is Currently in use elsewhere

应用程序同时使用 2 个后台工作程序。 我一直试图从错误中指出确切的 location/line 数字。

这就是我从堆栈跟踪中得到的

如何定位错误的确切位置?这样我就可以采取适当的措施来纠正这个问题。

您需要使用 Windows 调试工具,例如 Adplus,Windbg or a MemoScope.Net, a relatively new Graphical tool which internally use clrmd。想法仍然存在,像 Crash、Hang 这样的系统问题,尤其是在多用户/多线程环境中由于同步、数据结构/内存损坏而发生的问题,需要通过在 运行 处创建快照/转储来调试-time,需要使用正确的 Pdb 文件(程序调试数据库)进行分析,以便可以检查线程堆栈,其中发生异常/死锁,从而可以调用纠正措施。

光看你提供的信息,很难猜出是哪里出了问题,但我猜是因为你有多个后台worker在做处理,所以访问资源需要同步,使用 lock 或类似结构,因此不会有多个线程同时尝试访问它。

另一个问题仍然存在,为什么在当天使用后台工作程序,为什么不使用 Async Await,这将是更清晰的实现,并且不会面临多线程的挑战,因为它不会在单独的线程上分派调用。