Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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
C# 跟踪生成的线程_C#_.net_Wpf - Fatal编程技术网

C# 跟踪生成的线程

C# 跟踪生成的线程,c#,.net,wpf,C#,.net,Wpf,提前道歉-我不是解决这个问题的合适人选,但今天有一场大暴风雪,只有实习生(我)疯了,从我的团队进来 保持简单-我有一个应用程序,在重复某个任务(反序列化文件并根据数据进行某些调用)大约115次后,有一个阈值,其他几个任务中的任何一个都会使应用程序崩溃。所有这三种可能导致应用程序崩溃的操作都涉及显示新窗口 我最好的猜测是(在我反复单击Windows任务管理器时盯着线程数)我们没有正确地处理线程。公式似乎是每次我加载文件时产生的4个挂起的线程(实际上创建的线程更多,大多数都消失了)。我想知道是否有一

提前道歉-我不是解决这个问题的合适人选,但今天有一场大暴风雪,只有实习生(我)疯了,从我的团队进来

保持简单-我有一个应用程序,在重复某个任务(反序列化文件并根据数据进行某些调用)大约115次后,有一个阈值,其他几个任务中的任何一个都会使应用程序崩溃。所有这三种可能导致应用程序崩溃的操作都涉及显示新窗口

我最好的猜测是(在我反复单击Windows任务管理器时盯着线程数)我们没有正确地处理线程。公式似乎是每次我加载文件时产生的4个挂起的线程(实际上创建的线程更多,大多数都消失了)。我想知道是否有一种方法可以一步一步地检查代码,并在处理过程中观察线程的数量。现在我甚至不知道线程何时何地启动,但如果我知道,我可以遵循它们的逻辑,确保它们不会继续不必要地运行


谢谢

如果您有权访问每个线程中正在运行的方法的源,那么您可以插入一些跟踪语句,这些语句附加到列表中,您可以在调试器中查看这些语句,也可以转储到文件中,以了解线程的执行顺序。锁定列表以保持执行顺序。

您可以使用IntelliTrace查看所有应用程序线程。
只要在需要时暂停它,就可以看到每个正在运行的线程的调用堆栈。

我认为最有可能的情况是您从后台线程创建新表单或访问表单/控件

要调试该问题,请订阅以下事件

以及:


在每个eventhandler中放置一个断点,并在事件参数的异常中锁定堆栈跟踪。

当内部代码停止时,线程将消失。您可以使用调试器跟踪线程,但它似乎不太可能对您有所帮助。您不使用线程池的原因是什么?根据你所说的,这将消除这个问题。重用线程比不断创建/处置线程要好(即使它们被正确处置)。和+1,用于在下雪的情况下上班:)process explorer可以帮助您跟踪由进程创建的线程。@Tim:他不知道线程是从何处产生的,更不用说通过将旧线程拆分为新线程来实现线程池了。我试过类似的方法,在我知道的每个方法中添加对静态日志方法的调用,这些方法在一个单独的线程中运行,但我知道的那些方法的行为都是正确的。我无法解释其他程序员代码创建的任务和后台工作人员,但因为我不知道它们在哪里,所以我无法记录它们。谢谢你。
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);