📅  最后修改于: 2023-12-03 15:14:32.985000             🧑  作者: Mango
本文将分享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#中运行多个任务,都可以使用线程来实现。