我有以下代码来捕获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个后台工作程序。 我一直试图从错误中指出确切的位置/行号。
从堆栈跟踪这是我得到的
如何找到错误的确切位置?这样我就可以采取适当的措施来纠正这个问题。
答案 0 :(得分:1)
您需要使用Windows调试工具,例如Adplus,Windbg或MemoScope.Net,这是一种内部使用clrmd的相对较新的图形工具。想法仍然存在,像Crash,Hang这样的问题是系统问题,特别是在由于同步,数据结构/内存损坏而发生的多用户/多线程环境中,需要通过在运行时创建快照/转储来调试,需要使用正确的Pdb文件(程序调试数据库)进行分析,以便可以检查线程堆栈,发生异常/死锁,从而可以调用纠正措施。
仅仅通过查看您提供的信息,很难猜测,可能出现了什么问题,但我的猜测是因为您有多个后台工作人员正在进行处理,因此需要同步对资源的访问权限,使用lock
或类似的构造,因此多个线程不会同时尝试访问它。
另一个问题仍然存在,为什么背景工作者在当天,为什么不Async等待,这将是更清洁的实现,并且不会有多线程的挑战,因为它不会在单独的线程上调度调用。