获取运行线程

时间:2011-01-03 09:20:01

标签: c# multithreading

如果我按代码运行各种线程

        var t = new Thread(() =>
        {
            try
            {
            }
            }
            catch (Exception ca)
            {
                MessageBox.Show(ca.Message);
            }
        });
        t.SetApartmentState(ApartmentState.STA);
        t.Name = "Thread1";
        t.Start()

我们可以稍后通过知道它的名称来终止线程,我们打算停止thread1或thread4,我们应该能够阻止它:)

4 个答案:

答案 0 :(得分:6)

Process.GetCurrentProcess().Threads

或者如果您有一个线程列表并且每当您创建一个新线程时,它都会更简单,您可以将它添加到列表中,并定期删除已退出的线程。您可能还需要同步。

答案 1 :(得分:3)

如果你有类似Dictionary<string,Thread>之类的东西,当你开始一个线程,把它放在字典中,并以它的名字作为关键字时,事情会很容易。然后你可以使用以下命令得到一些线程:

var t = threads["thread1"];

答案 2 :(得分:3)

Thread类有Abort方法,允许您终止线程。这就是说终止线程的正确方法是使用一些共享资源来指示线程是继续还是停止。例如,在线程内部,您可以实现一种机制,该机制在循环中测试此静态变量的值并突破循环。在主线程上,当您决定终止后台线程时,只需设置静态变量的值,线程就会自行停止。

以下是一个例子:

 private static volatile bool _shouldTerminate = false;

并在线程内:

while (!_shouldTerminate)
{
    // .. do something useful
}

当你决定从另一个线程停止线程时:

_shouldTerminate = true;

答案 3 :(得分:2)

您可以构建Dictionary <string,Thread>。关键是名称,值是线程对象本身。然后,您可以在从dicitonary获得的线程对象上调用Abort方法。

注意:Abort不是结束线程的好方法。尝试使用一些全局标志。