📜  C#线程示例:静态与非静态方法(1)

📅  最后修改于: 2023-12-03 15:14:32.985000             🧑  作者: Mango

C#线程示例:静态与非静态方法

本文将分享C#编程中线程的使用方法,重点介绍静态与非静态方法的应用。线程是指为执行代码提供一个独立的执行路径,可以同时运行多个线程以增加应用程序效率。

线程基础

C#中的线程主要是通过System.Threading.Thread命名空间来实现的。该命名空间提供了一组工具和接口,用于支持多线程编程。下面是一个简单的创建和运行线程的例子:

using System;
using System.Threading;

public class MyThread {
  public void Run() {
    for (int i = 0; i < 10; i++) {
      Console.WriteLine("MyThread - {0}", i); 
      Thread.Sleep(100);
    } 
  }
}

class Program {
  static void Main() {
    MyThread thread = new MyThread();
    Thread t = new Thread(new ThreadStart(thread.Run));
    t.Start();
    Console.WriteLine("Main thread exiting."); 
  }
}

这个例子中,创建了一个名为MyThread的类,它包含一个名为Run的线程函数,函数在运行的时候输出一些信息到控制台,并在每次运行的时候等待100毫秒。

Main函数中,首先创建了一个MyThread类的实例。然后,创建了一个名为t的线程,并将该实例的Run函数作为参数传递给了线程。最后,调用了t.Start(),该函数将开始运行一个新的线程。在New Thread运行时,程序继续运行并输出了一条信息。

静态方法的应用

在实际应用中,我们可能会遇到需要同时运行多个相同类型的任务的情况,那么静态方法就可以发挥很好的作用。

public class MyThread {
  int i;

  public MyThread(int i) {
    this.i = i;
  }

  public static void Run(object obj) {
    MyThread thread = obj as MyThread;
    if (thread != null) {
      for (int i = 0; i < 10; i++) {
        Console.WriteLine("MyThread - {0}", thread.i); 
        Thread.Sleep(100);
      }
    }
  }
}

class Program {
  static void Main() {
    for (int i = 0; i < 5; i++) {
      Thread t = new Thread(new ParameterizedThreadStart(MyThread.Run));
      t.Start(new MyThread(i));
    }
    Console.WriteLine("Main thread exiting."); 
  }
}

在这个例子中,首先定义了一个名为MyThread的类,该类包含一个整型变量i和一个名为Run的静态方法,Run函数的参数类型为object类型。在Run函数内,将传递的obj参数转换为MyThread类,并将i的值输出到控制台。Main函数通过循环创建了5个线程,并将每个线程启动时所需的参数传递给了线程。

非静态方法的应用

当需要访问某个对象的成员时,可以使用非静态方法。

public class MyThread {
  int i;

  public MyThread(int i) {
    this.i = i;
  }

  public void Run() {
    for (int i = 0; i < 10; i++) {
      Console.WriteLine("MyThread - {0}", this.i); 
      Thread.Sleep(100);
    }
  }
}

class Program {
  static void Main() {
    for (int i = 0; i < 5; i++) {
      MyThread thread = new MyThread(i);
      Thread t = new Thread(new ThreadStart(thread.Run));
      t.Start();
    }
    Console.WriteLine("Main thread exiting."); 
  }
}

在这个例子中,MyThread类中的Run方法没有被定义为静态方法。在Main函数中,循环创建5个线程,并将MyThread类的实例作为参数传递给了线程。

总结

本文介绍了C#编程中线程的基础用法,着重介绍了静态和非静态方法在线程中的应用。无论何时你需要在C#中运行多个任务,都可以使用线程来实现。