线程在c#中

时间:2011-03-22 07:25:57

标签: c# multithreading

在我的应用程序中,我有一个父线程。我想知道如果我暂停父线程的执行,子线程会发生什么?他们会继续执行还是会被暂停并等待父线程恢复执行?请帮帮我。

3 个答案:

答案 0 :(得分:4)

线程实际上没有父/子关系 - 一旦线程启动,它就独立于创建它的线程。

(我担心你为父线程使用“suspend”这个词 - 暂停一个线程通常是一个坏主意。特别是,如果你的意思是调用Thread.Suspend你应该知道那个已被弃用了。你的意思是什么?如果你想在线程之间协调工作,那就有更好的方法。)

示例代码,显示四个线程正在工作,暂停,恢复,然后流程终止:

using System;
using System.Threading;

public class A  
{
    static void Main()
    {
        // Start off unpaused
        var sharedEvent = new ManualResetEvent(true);

        for (int i = 0; i < 4; i++)
        {
            string prefix = "Thread " + i;
            Thread t = new Thread(() => DoFakeWork(prefix,
                                                   sharedEvent));
            // Let the process die when Main finished
            t.IsBackground = true;
            t.Start();
        }
        // Let the workers work for a while
        Thread.Sleep(3000);
        Console.WriteLine("Pausing");        
        sharedEvent.Reset();

        Thread.Sleep(3000);       
        Console.WriteLine("Resuming");
        sharedEvent.Set();

        Thread.Sleep(3000);
        Console.WriteLine("Finishing");
    }

    static void DoFakeWork(string prefix, ManualResetEvent mre)
    {
        while (true)
        {
            Console.WriteLine(prefix + " working...");
            Thread.Sleep(500);
            mre.WaitOne();
        }
    }
}

答案 1 :(得分:2)

线程在.Net中确实没有父子关系 - 所以挂起一个线程不会挂起碰巧由它创建的其他线程。

答案 2 :(得分:0)

简而言之,如果你的意思是child是从你调用parent的另一个线程开始的线程,那么没有子线程因为主线程被挂起而不会被挂起。 检查这个例子: http://www.codersource.net/microsoft-net/c-basics-tutorials/c-net-tutorial-multithreading.aspx