我有一个像这样的控制台应用程序,它正在使用线程。
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
程序正常执行。但我无法理解这个输出是如何产生的。这个程序如何运作?我对线程没有很好的理解。
有人可以帮我解释一下吗?
答案 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 ..是吗?