.net挂起应用程序.DoEvents
我们的传统产品之一是Winforms应用程序,它不使用后台线程,而是在主UI线程上执行所有操作。它在这个主线程上运行一个常量循环,每隔20毫秒调用Application.DoEvents()。偶尔应用程序会挂起DoEvents调用。我的问题是如何找出代码挂起的队列事件调用 还有,有人知道我可以使用什么工具来获取进程中每个线程的堆栈跟踪吗.net挂起应用程序.DoEvents,.net,freeze,doevents,.net,Freeze,Doevents,我们的传统产品之一是Winforms应用程序,它不使用后台线程,而是在主UI线程上执行所有操作。它在这个主线程上运行一个常量循环,每隔20毫秒调用Application.DoEvents()。偶尔应用程序会挂起DoEvents调用。我的问题是如何找出代码挂起的队列事件调用 还有,有人知道我可以使用什么工具来获取进程中每个线程的堆栈跟踪吗 而且,这只发生在生产客户机上,我们现在必须得到解决。也不可能在客户端安装VS 您可以在VisualStudio中这样做,只需附加到进程,中断执行并打开线程窗口
而且,这只发生在生产客户机上,我们现在必须得到解决。也不可能在客户端安装VS 您可以在VisualStudio中这样做,只需附加到进程,中断执行并打开线程窗口
菜单:Debug->Windows->Threads我找到了我要找的工具
它可以获取当前运行的windows进程的堆栈跟踪。但是,它确实需要该应用程序的PDB文件。该代码需要认真重构。它是否在调试期间挂起?该工具称为Visual Studio。暂停进程,然后转到“线程”窗口。如果在UI线程上完成了所有操作,则只需获取UI线程的堆栈跟踪。我建议@Tejs,分析问题的时间最好花在重构表单上。基本上,您必须将循环移动到后台工作线程,并将任何调用从后台线程更改为UI线程,以便它使用BeginInvoke-pattern。不幸的是,这将不起作用。客户遇到了该问题,我们无法在内部复制该问题,也无法在他们的机器上安装VS。我将编辑原始问题。