需要帮助了解C#线程

时间:2015-05-16 04:34:56

标签: c# multithreading

我有一个像这样的控制台应用程序,它正在使用线程。

namespace ConsoleApplication1
{
    public static class Program
    {
        public static void ThreadMethod()
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine("ThreadProc: {0}", i);              
                Thread.Sleep(0);
            }
            Console.ReadLine();
        }
        public static void Main()
        {
            Thread t = new Thread(new ThreadStart(ThreadMethod));
            t.Start();
            for (int i = 0; i < 4; i++)
            {
                Console.WriteLine("Main thread: Do some work.");
                Thread.Sleep(0);
            }
            t.Join();
        }
    }
}

计划的输出如下:

Main thread: Do some work.
ThreadProc: 0
Main thread: Do some work.
ThreadProc: 1
Main thread: Do some work.
ThreadProc: 2
Main thread: Do some work.
ThreadProc: 3
ThreadProc: 4
ThreadProc: 5
ThreadProc: 6
ThreadProc: 7
ThreadProc: 8
ThreadProc: 9
ThreadProc: 10

程序正常执行。但我无法理解这个输出是如何产生的。这个程序如何运作?我对线程没有很好的理解。

有人可以帮我解释一下吗?

3 个答案:

答案 0 :(得分:7)

Main()是您申请的起点。

t.Start()创建与主要线程并行运行的第二个线程。从现在开始,方法Main中的代码与方法ThreadMethod一起执行。控制台输出订单中没有保证。改变睡眠时间,你会看到不同的结果。

t.Join将执行Main,直到ThreadMethod完成。在这一行下面,程序只有一个线程,一切都将按顺序执行。

评论中提到的

This文章是C应用程序中线程的一个很好的解释,但这些相同的原理适用于几乎所有语言。

This article更详细地解释了C#中的线程化。

答案 1 :(得分:2)

作为初学者,如果您的目标是了解Thread在.NET中的运行方式,我建议您在Visual Studio中打开Threads窗口,并观察程序在整个过程中的进展情况。

而不是按F5调试应用程序,请尝试按F11以进入代码的第一行。它应该使您进入调试模式,并在第一行暂停该过程。

要打开Threads窗口,请按Ctrl + Alt + H,也可以按以下方式导航菜单找到它:Debug > Windows > Threads。此菜单仅在调试时可见。

当您单步执行代码时,每次调用Thread.Sleep(0);

时,您应该能够看到活动线程在第一个和第二个线程之间切换

希望这有帮助。

答案 2 :(得分:1)

线程是任何编程语言中的轻量级进程。

通常,程序作为进程执行。类似地,主题是小型流程,分为一个主流程

例如:如果程序正在系统中执行(例如, Web浏览器,则Web浏览器就是进程,并且在浏览器标签中, http连接,浏览器呈现是线程)。

实际上,我没有在C#中使用线程,有一天我使用smtp.send(Mail)发送邮件。 send(mail)需要花费5个时间来执行,因为它需要互联网连接。所以我使用单独的线程在 Main()之外运行此send()方法。

我希望你能理解 THREADS ..是吗?