我想列出所有正在运行的线程,但不是通过使用List<>该类.我想动态观察正在运行的线程.我怎样才能做到这一点?
假设我开始这样的两个线程:
// Start first thread
Thread loaderThread1 = new Thread(loader.Load);
loaderThread1.Name = "Rope";
loaderThread1.Start();
// Start second thread
Thread loaderThread2 = new Thread(loader.Load);
loaderThread2.Name = "String";
loaderThread2.Start();
Run Code Online (Sandbox Code Playgroud)
有什么办法可以通过使用Name属性来枚举线程吗?
我希望能够检查具有特定名称的线程是否仍在运行.
我创建的每个线程都使用一组命名数据,数据集的名称用作处理数据的线程的名称.在启动工作线程之前,我想查看同一组数据的任何先前线程是否已在运行.
我使用的线程System.Diagnostics.GetCurrentProcess().Threads是类型的ProcessThread,而不是Thread!
我的应用程序中有一个错误,只有当我在调试器中暂停应用程序几分钟时,它才能显示出来.我怀疑这是由于我使用的第三方网络库有一个心跳线程,当它的心跳线程暂停时它无法ping服务器时会断开连接.
我正在尝试为此编写一个测试用例应用程序,以验证这是导致该错误的原因.为此,我需要一种方法来暂停应用程序中的所有线程(我稍后将其缩小到仅暂停我怀疑可能是心跳线程的线程)来模拟在调试器中暂停应用程序.
有谁知道如何做到这一点?一个线程甚至可能导致另一个线程入睡吗?
谢谢,亚历克斯
更新:
我最终决定我真的不需要一个应用程序为我这样做,因为重点是验证调试器中的暂停导致断开连接.所以,这就是我所做的......(最简单的方法往往是最好的......或者至少是最简单的......)
private static void Main(string[] args)
{
IPubSubAdapter adapter = BuildAdapter();
bool waitingForMessage;
adapter.Subscribe(_topic, message => waitingForMessage = false, DestinationType.Topic);
Stopwatch timePaused = new Stopwatch();
while (adapter.IsConnected)
{
Console.WriteLine("Adapter is still connected");
waitingForMessage = true;
adapter.Publish(_topic, "testmessage", DestinationType.Topic);
while (waitingForMessage)
{
Thread.Sleep(100);
}
timePaused.Reset();
timePaused.Start();
Debugger.Break();
timePaused.Stop();
Console.WriteLine("Paused for " + timePaused.ElapsedMilliseconds + "ms.");
Thread.Sleep(5000); // Give it a chance to realise it's disconnected.
}
Console.WriteLine("Adapter is disconnected!");
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
并输出:
Adapter is still connected …Run Code Online (Sandbox Code Playgroud) .NET(VB.NET或C#)是否有一种方法,当发生异常时,转储每个线程的堆栈跟踪?基本上我想重现Visual Studio的Debug-> Threads窗口中发生的事情,看看发生异常时每个线程正在做什么