如何在其他线程之前调用线程?

时间:2014-04-23 01:00:43

标签: c# multithreading

我是线程新手,并不太了解它的结构。

class Program
{
    static void Main(string[] args)
    {
        Console.Read();
    }

    static void Gone()
    {
        for (int i = 0; i < 5; i++)
        {

            Console.WriteLine("Gone");
        }
    }

    static void Going()
    {
        for (int i = 0; i < 2; i++)
        {       
            Console.WriteLine("Going");
        }
    }
}
}

我正在尝试更改上面的代码,以便主线程创建一个调用Gone方法的线程。此外,我想改变Gone方法,因此它创建了一个线程,在打印消失之前点击Going 。我假设一个Join会用在我的问题的后一个但我不知道在哪里放线程或在哪里使用连接(我在Main方法中有以下代码,但只显示“Gone”这个词5次,而不是“去”。

Thread t = new Thread(Gone);
        t.Start();
        t.Join();

2 个答案:

答案 0 :(得分:1)

我不确定我是否理解正确,但这就是我要做的事情:

class Program
{
    static void Main(string[] args)
    {
        Thread thread2 = new Thread(new ThreadStart(Gone));

        thread2.Start();

        Console.Read();
    }

    static void Gone()
    {
        for (int i = 0; i < 5; i++)
        {


            Thread thread1 = new Thread(new ThreadStart(Going));
            thread1.Start();
            thread1.Join();
            Console.WriteLine("Gone");
        }
    }
    static void Going()
    {
        for (int i = 0; i < 2; i++)
        {       
            Console.WriteLine("Going");
        }
    }

输出:

Going Going Gone Going Going Gone Going Going Gone Going Going Gone Going Going Gone

这将同步运行。

答案 1 :(得分:0)

键入但未编译..我想你想要这个 - 如果它不构建/运行你需要调整一下,但它给出了一般的想法:

class Program
{
    static void Main(string[] args)
    {
        Run();
        Console.Read();
    }

    static async void Run()
    {
         await Gone();
    }

    static async void Gone()
    {
        for (int i = 0; i < 5; i++)
        {
            await Going();
            Console.WriteLine("Gone");
        }
    }

    static async void Going()
    {
        for (int i = 0; i < 2; i++)
        {       
            Console.WriteLine("Going");
        }
    }
}
}