c#中的简单线程无法正常工作

时间:2015-04-02 15:41:21

标签: c# multithreading

我关注this screencast on multithreading

分钟12:13中的视频说该程序应该在名为t的线程上运行循环,然后从主线程运行代码。所以在输出中我应该看到ThreadProc 0 - 9,然后是主线程的4次消息 - 正好与我所知道的相反。

问题出了什么问题。根据截屏视频,代码看起来很相似。

代码:

namespace Objective_1._1 {


   internal class Program

{
    public static void ThreadMethod()
    {
        for (var i = 0; i < 10; i++)
        {
            Console.WriteLine("ThreadProc {0}", i);
            Thread.Sleep(0);
        }
    }

    public static void Main()
    {
        var t = new Thread(ThreadMethod);
        t.Start();

        // Loop on the main thread
        for (var i = 0; i < 4; i++)
        {
            Console.WriteLine("Main thread: Do some work");
            Thread.Sleep(0);
        }

       //Do not pass this line of code and exit the main until thread t finish
        t.Join();
    }
} }

当用户运行它时,结果如下:

enter image description here

修改

结果

  

Thread.sleep代码(5)

主要是

enter image description here

编辑2

预期结果:

enter image description here

2 个答案:

答案 0 :(得分:2)

由于您正在进行多线程处理,因此无法保证在不给予线程优先级高于其他线程的情况下将运行哪些订单线程。只是因为你希望你的线程首先运行然后主线程完成,IMO,打败了多线程的目的。你可能还没有产生一个线程开始。就像Yair Nevet所说,主线程在你的线程初始化和启动之前一直保持运行。对于&#34; true&#34;多线程,我本来期望你的输出混合在一起,但不能保证像pm100评论一样。

现在回答你关于在主线程之前完成Thread完成的问题,将Thread.Join()移到主线程中的for循环之上,你就可以得到你想要的预期输出。

答案 1 :(得分:0)

  

所以在输出中我应该看到ThreadProc 0 - 9,然后是4次消息   从主线程 - 正好与我所知道的相反。

您首先看到主线程的写入,因为初始化子线程的时间需要一段时间并且稍后启动 - 同时,主线程继续运行并执行其操作。