一个关于Thread的基本查询连接使用c#

本文关键字:查询 连接 Thread 一个 | 更新日期: 2023-09-27 18:06:11

有时我在程序中使用线程,但我从不使用join()。我得到了一些关于join()的东西,比如下面的

Join will stop the current running thread and let the "Join" thread runs until it finishes.
static void Main()
{
  Thread t = new Thread (Go);
  t.Start();
  t.Join();
  Console.WriteLine ("Thread t has ended!");
}
static void Go()
{
  for (int i = 0; i < 10; i++) Console.Write ("y");
}
从上面的代码中,我只是不明白join()在这里扮演了什么样的重要角色。请讨论连接的使用。

如果可能的话,给我一个join()的实际代码,这样我就能理解join()的良好使用。

还说明join()可以在多线程环境中使用。由于

一个关于Thread的基本查询连接使用c#

以您发布的代码为例,如果它是这样写的:

static void Main()
{
  Thread t = new Thread (Go);
  t.Start();
  Console.WriteLine ("Thread t has ended!");
}
static void Go()
{
  for (int i = 0; i < 10; i++) Console.Write ("y");
}

你的输出应该是这样的:

yyy线程已经结束!yyyyyyy

意味着Go()Console.WriteLine ("Thread t has ended!");同时运行

通过添加t.j join(),您可以等到线程完成后再继续。如果你只想让代码的一部分与一个线程同时运行,这是很有用的。

如果您从代码应用程序中删除t.j join(),它将在您可以确定Go()方法执行之前结束执行。

Join是非常有用的,如果你有两个或两个以上的方法可以同时执行,但所有的方法都需要完成,然后才能执行依赖于它们的方法。

请看下面的代码:

static void Main(string[] args)
        {
        Thread t1 = new Thread(Method1);
        Thread t2 = new Thread(Method2);
        t1.Start();
        t2.Start();
        Console.WriteLine("Both methods are executed independently now");
        t1.Join(); // wait for thread 1 to complete
        t2.Join(); // wait for thread 2 to complete
        Console.WriteLine("both methods have completed");
        Method3(); // using results from thread 1 and thread 2 we can execute  method3 that can use results from Method1 and Method2
        }

阻塞调用线程,直到线程终止。

注意:您还可以阻塞调用线程,直到线程终止或指定的时间过去,同时继续运行标准的COM和SendMessage泵送。支持。. NET Compact Framework.

链接:http://msdn.microsoft.com/fr-fr/library/system.threading.thread.join(v=vs.80).aspx

以游戏为例。

static void Main()
{
  Thread t = new Thread (LoadMenu);
  t.Start();
  Showadvertisement();
  t.Join();
  ShowMenu();
}
static void LoadMenu()
{
    //loads menu from disk, unzip textures, online update check.
}
static void Showadvertisement()
{
    //Show the big nvidia/your company logo fro 5 seconds
}
static void ShowMenu()
{
   //everithing is already loaded. 
}

关键是你可以在两个线程中做多个事情,但在某一点上你应该同步它们,并确保所有事情都已经完成

. join()调用等待线程结束。我的意思是这个调用会在你的Go方法返回时返回