指出StackTrace多线程的错误位置

时间:2017-04-02 07:27:04

标签: c# .net bitmap backgroundworker gdi+

我有以下代码来捕获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();
        }

我正在处理图片。我不断得到这个例外

Object is Currently in use elsewhere

应用程序同时使用2个后台工作程序。 我一直试图从错误中指出确切的位置/行号。

从堆栈跟踪这是我得到的

enter image description here

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

1 个答案:

答案 0 :(得分:1)

您需要使用Windows调试工具,例如Adplus,WindbgMemoScope.Net,这是一种内部使用clrmd的相对较新的图形工具。想法仍然存在,像Crash,Hang这样的问题是系统问题,特别是在由于同步,数据结构/内存损坏而发生的多用户/多线程环境中,需要通过在运行时创建快照/转储来调试,需要使用正确的Pdb文件(程序调试数据库)进行分析,以便可以检查线程堆栈,发生异常/死锁,从而可以调用纠正措施。

仅仅通过查看您提供的信息,很难猜测,可能出现了什么问题,但我的猜测是因为您有多个后台工作人员正在进行处理,因此需要同步对资源的访问权限,使用lock或类似的构造,因此多个线程不会同时尝试访问它。

另一个问题仍然存在,为什么背景工作者在当天,为什么不Async等待,这将是更清洁的实现,并且不会有多线程的挑战,因为它不会在单独的线程上调度调用。