Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net挂起应用程序.DoEvents_.net_Freeze_Doevents - Fatal编程技术网

.net挂起应用程序.DoEvents

.net挂起应用程序.DoEvents,.net,freeze,doevents,.net,Freeze,Doevents,我们的传统产品之一是Winforms应用程序,它不使用后台线程,而是在主UI线程上执行所有操作。它在这个主线程上运行一个常量循环,每隔20毫秒调用Application.DoEvents()。偶尔应用程序会挂起DoEvents调用。我的问题是如何找出代码挂起的队列事件调用 还有,有人知道我可以使用什么工具来获取进程中每个线程的堆栈跟踪吗 而且,这只发生在生产客户机上,我们现在必须得到解决。也不可能在客户端安装VS 您可以在VisualStudio中这样做,只需附加到进程,中断执行并打开线程窗口

我们的传统产品之一是Winforms应用程序,它不使用后台线程,而是在主UI线程上执行所有操作。它在这个主线程上运行一个常量循环,每隔20毫秒调用Application.DoEvents()。偶尔应用程序会挂起DoEvents调用。我的问题是如何找出代码挂起的队列事件调用

还有,有人知道我可以使用什么工具来获取进程中每个线程的堆栈跟踪吗


而且,这只发生在生产客户机上,我们现在必须得到解决。也不可能在客户端安装VS

您可以在VisualStudio中这样做,只需附加到进程,中断执行并打开线程窗口


菜单:Debug->Windows->Threads

我找到了我要找的工具


它可以获取当前运行的windows进程的堆栈跟踪。但是,它确实需要该应用程序的PDB文件。

该代码需要认真重构。它是否在调试期间挂起?该工具称为Visual Studio。暂停进程,然后转到“线程”窗口。如果在UI线程上完成了所有操作,则只需获取UI线程的堆栈跟踪。我建议@Tejs,分析问题的时间最好花在重构表单上。基本上,您必须将循环移动到后台工作线程,并将任何调用从后台线程更改为UI线程,以便它使用BeginInvoke-pattern。不幸的是,这将不起作用。客户遇到了该问题,我们无法在内部复制该问题,也无法在他们的机器上安装VS。我将编辑原始问题。