2017-04-02 47 views
0

我有下面的代码,以捕获未处理的异常withing的Program.cs文件中的WinForms应用从堆栈跟踪,多线程他指出错误的位置

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个后台工作人员。 我一直在试图指出从错误的确切位置/行号。

从堆栈跟踪,这是我所得到的

enter image description here

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

回答

1

您需要使用Windows调试工具,如Adplus,WindbgMemoScope.Net,这是一种相对较新的图形工具,它在内部使用clrmd。观念仍然存在,像崩溃,挂起,这是系统的问题,尤其是在多用户出现因同步,数据结构/内存损坏/多线程的环境问题,需要通过在运行时创建快照/转储,调试这需要使用正确的PDB文件(程序调试数据库)进行分析,使线程堆栈可以进行审查,其中异常/僵局正在发生的事情,从而纠正措施可以被调用。

仅仅通过查看您提供的信息,很难猜出可能出错的地方,但我的猜测是您有多个后台工作人员正在进行处理,因此需要访问资源同步,用lock或类似的构造,因此一个以上的线程不试图在同一时间访问它。

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

+0

问题是在工人异步事件访问GUI元素,我把它搬到了工人完成,这个问题是固定的:) ..反正感谢您的帮助... – techno

+0

欢迎,因为大家都知道的应用程序和其他细节,所以它更容易缩小,否则,这些工具是非常标准的查找和解决这些非functonal问题 –

+0

啊...我想我有一个类似的问题早...花了很多时间来缩小当时的原因。我认为这个问题现在已经得到解决......可能需要更多的测试。 – techno