在VS2010中进行调试时阻止UI

时间:2012-05-15 01:14:24

标签: .net winforms debugging

我在.NET Forms应用程序中遇到一个难以诊断的问题,其中UI在运行调试器时会阻塞。

该块是随机的,虽然被阻止,如果我单击调试器中的暂停按钮,它实际上不会完成暂停,直到块释放。

我已经通过运行调试程序来尝试调试程序以外的程序,它不会阻塞并运行正常。

我曾尝试使用分析器(蚂蚁)来查找块,但在此状态下它也不会阻止,并且分析器报告没有显示任何值得注意的内容。

应用程序运行后台线程来处理Socket连接超时(使用Threading.Timer,它们不与UI通信)。

网络运营正在使用BeginXXX来电。

我很难找到这个问题,因为它不会发生在用户身上,但是当这些块似乎发生时,很难尝试调试程序的其他方面。

UI的主要焦点是用户控件显示机器网格,其连接状态是从UI线程的状态对象(POSTerminal)中检索的,

有什么我可以看到可能在Debugger / UI阻塞之间找到连接吗?

3 个答案:

答案 0 :(得分:1)

这是一个艰难的。我认为本系列中的视频可以为您提供一些诊断正在发生的事情的想法:

http://channel9.msdn.com/Series/-NET-Debugging-Stater-Kit-for-the-Production-Environment/Diagnosing-Application-Issues-01

答案 1 :(得分:1)

我最终跟踪了这一点。发生的事情是多个线程,其中引发的事件正在回到主要形式。

在表单中检查InvokeRequired然后BeginInvoke此事件返回到mainform线程。问题是,事件引发中存在一个错误,即引发了数千个事件,并且每个事件都被调用,这些事件锁定了表单上的检查。因此导致程序(和调试器)冻结。

我不希望调试器冻结,但是直到调试器中的Pause / Stop被按下之前所有锁定/调用都被处理完毕。

答案 2 :(得分:0)

您是否尝试过登录VS Debug-> Windows->线程窗口? 那里你应该能够看到你的线程的状态,以及能够“切换到线程”,以暂停在那个特定的线程。