重新学C#变成160-ParameterizedThreadStart:创建进程

与前面一篇学习的ThreadStart不同,ParameterizedThreadStart可以带参数。

在 C# 语言中使用 ParameterizedThreadStart 创建进程,首先需要创建 ParameterizedThreadStart 委托的实例,然后再创建 Thread 类的实例。

具体的代码如下。

ParameterizedThreadStart pts=new ParameterizedThreadStart( 方法名 );
Thread t=new Thread(pts);

 

可以使用一个例子来学习一下。

新建一个控制台项目,输出1-100的偶数。完整代码如下

using System;
using System.Threading;
namespace ParameterizedThreadStart练习1
{
  class Program
  {
    static void Main(string[] args)
    {
      Console.WriteLine("ParameterizedThreadStart练习");
      ParameterizedThreadStart parameterizedThreadStart = new ParameterizedThreadStart(showEven);
      Thread thread = new Thread(parameterizedThreadStart);
      thread.Start(100);
    }
    public static void showEven(object n)//显示偶数
    {
      for(int i=2; i<=(int)n;i+=2)
      {
        Console.Write(i + " ");
      }
    }
  }
}

运行结果为

需要注意的是,在使用 ParameterizedThreadStart 委托调用带参数的方法时,方法中的参数只能是 object 类型并且只能含有一个参数

在启动线程时要在线程的 Start() 方法中为委托的方法传递参数。

如果需要通过 ParameterizedThreadStart 委托引用多个参数的方法,由于委托方法中的参数是 object 类型的,传递多个参数可以通过类的实例来实现。

下面通过实例来演示使用 ParameterizedThreadStart 委托引用多个参数的方法。

完整代码是

using System;
using System.Threading;
namespace ParameterizedThreadStart_练习2_多个参数
{
  class Program
  {
    static void Main(string[] args)
    {
      Console.WriteLine("ParameterizedThreadStart 多个参数练习");
      ParameterizedThreadStart parameterizedThreadStart = new ParameterizedThreadStart(showEven);
      ParameterTest parameterTest = new ParameterTest(10, 100);
      Thread thread = new Thread(parameterizedThreadStart);
      thread.Start(parameterTest);
    }
    public class ParameterTest
    {
      public int beginNum, endNum;
      public ParameterTest(int a,int b)
      {
        this.beginNum = a;
        this.endNum = b;
      }
    }
    public static void showEven(object n)
    {
      if(n is ParameterTest)
      {
        int beginNum = ((ParameterTest)n).beginNum;
        int endNum = ((ParameterTest)n).endNum;
        for(int i=beginNum;i<=endNum;i+=2)
        {
          Console.Write(i + " ");
        }

      }
    }
  }
}

运行结果为

从代码可以看出,通过为 ParameterTest 类中的字段赋值,并将其通过线程的 Start 方法传递给委托引用的方法showven,即可实现在委托引用的方法中传递多个参数的操作。

posted @ 2021-07-05 09:40  来自金沙江的小鱼  阅读(112)  评论(0编辑  收藏  举报