澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

澳门新萄京官方网站如果在调用线程时传递参数

2019-09-16 作者:www.8455.com   |   浏览(135)

Thread (ParameterizedThreadStart) 开首化 Thread 类的新实例,钦命允许对象在线程运行时传递给线程的信托。   
Thread (ThreadStart) 早先化 Thread 类的新实例。  
由 .NET Compact Framework 支持。  
Thread (ParameterizedThreadStart, Int32) 开首化 Thread 类的新实例,钦点允许对象在线程运行时传递给线程的信托,并点名线程的最大货仓大小。   
Thread (ThreadStart, Int32) 初叶化 Thread 类的新实例,钦赐线程的最大饭馆大小。  
由 .NET Compact Framework 支持。  
  我们只要定义不带参数的线程,能够用ThreadStart,带三个参数的用ParameterizedThreadStart。带多个参数的用其余的办法,上边逐个陈述。 

Thread (ParameterizedThreadStart) 初步化 Thread 类的新实例,钦赐允许对象在线程运行时传递给线程的信托。  
Thread (ThreadStart) 伊始化 Thread 类的新实例。 
由 .NET Compact Framework 支持。 
Thread (ParameterizedThreadStart, Int32) 开头化 Thread 类的新实例,钦定允许对象在线程运营时传递给线程的嘱托,并点名线程的最大仓库大小。  
Thread (ThreadStart, Int32) 开始化 Thread 类的新实例,内定线程的最大仓库大小。 
由 .NET Compact Framework 支持。 
  大家假如定义不带参数的线程,能够用ThreadStart,带八个参数的用ParameterizedThreadStart。带四个参数的用其它的点子,上边逐条陈述。 
一、不带参数的 

C#,往线程里传参数的不二等秘书诀总括

Thread (ParameterizedThreadStart) 开头化 Thread 类的新实例,钦命允许对象在线程运转时传递给线程的嘱托。  
Thread (ThreadStart) 开始化 Thread 类的新实例。 
由 .NET Compact Framework 支持。 
Thread (ParameterizedThreadStart, Int32) 初叶化 Thread 类的新实例,钦命允许对象在线程运转时传递给线程的嘱托,并钦定线程的最大商旅大小。  
Thread (ThreadStart, Int32) 初步化 Thread 类的新实例,钦点线程的最大旅馆大小。 
由 .NET Compact Framework 支持。 
  大家只要定义不带参数的线程,能够用ThreadStart,带贰个参数的用ParameterizedThreadStart。带三个参数的用别的的不二诀窍,下边逐条陈说。 
一、不带参数的 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Threading; 
 
namespace AAAAAA 
  class AAA 
  
  public static void Main() 
  
  Thread t = new Thread(new ThreadStart(A)); 
  t.Start(); 
 
  Console.Read(); 
  
 
  private static void A() 
  
  Console.WriteLine("Method A!"); 
  
  
}

结果呈现Method A! 

二、带二个参数的 
  由于ParameterizedThreadStart须求参数类型必得为object,所以定义的措施B形参类型必需为object。 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Threading; 
 
namespace AAAAAA 
  class AAA 
  
  public static void Main() 
  {  
  Thread t = new Thread(new ParameterizedThreadStart(B)); 
  t.Start("B"); 
 
  Console.Read(); 
  
 
  private static void B(object obj) 
  
  Console.WriteLine("Method {0}!",obj.ToString ()); 
 
  
  
}

结果呈现Method B! 

 

三、带七个参数的 
  由于Thread暗中同意只提供了这两种构造函数,假使要求传递几个参数,大家能够自身将参数作为类的性质。定义类的目的时候实例化那些性子,然后进行操作。 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Threading; 
 
namespace AAAAAA 
  class AAA 
  
  public static void Main() 
  
  My m = new My(); 
  m.x = 2; 
  m.y = 3; 
 
  Thread t = new Thread(new ThreadStart(m.C)); 
  t.Start(); 
 
  Console.Read(); 
  
  
 
  class My 
  
  public int x, y; 
 
  public void C() 
  
  Console.WriteLine("x={0},y={1}", this.x, this.y); 
  
  
}

结果呈现x=2,y=3 

 

四、利用结构体给参数字传送值。 
概念公用的public struct,里面能够定义自身索要的参数,然后在急需加上线程的时候,能够定义结构体的实例。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//结构体 
  struct RowCol 
  
  public int row; 
  public int col; 
  }; 
 
//定义方法 
public void Output(Object rc) 
  
  RowCol rowCol = (RowCol)rc; 
  for (int i = 0; i < rowCol.row; i ) 
  
  for (int j = 0; j < rowCol.col; j ) 
  Console.Write("{0} ", _char); 
  Console.Write("n"); 
  
  }

线程操作重要用到Thread类,他是概念在System.Threading.dll下。使用时索要加上那五个引用。该类提需求我们多个重载的构造函数(以下引自msdn)。    
   
Thread (ParameterizedThreadStart) 开首化 Thread 类的新实例,钦点允许对象在线程运维时传递给线程的嘱托。     
Thread (ThreadStart) 伊始化 Thread 类的新实例。    
由 .NET Compact Framework 支持。    
    
Thread (ParameterizedThreadStart, Int32) 发轫化 Thread 类的新实例,钦定允许对象在线程运营时传递给线程的委托,并钦命线程的最大仓库大小。     
Thread (ThreadStart, Int32) 开始化 Thread 类的新实例,钦点线程的最大旅馆大小。    
由 .NET Compact Framework 支持。   
    
   
   
  大家只要定义不带参数的线程,能够用ThreadStart,带三个参数的用ParameterizedThreadStart。带多少个参数的用别的的点子,下边逐个叙述。   
   
一、不带参数的   
   
using System;   
using System.Collections.Generic;   
using System.Text;   
using System.Threading;   
   
namespace AAAAAA   
{   
  class AAA   
  {   
    public static void Main()   
  {   
    Thread t = new Thread(new ThreadStart(A));   
    t.Start();   
    Console.Read();   
  }   
   
  private static void A()   
  {   
    Console.WriteLine("Method A!");   
  }   
  }   
}   
    
   
  结果显示Method A!   
   
二、带叁个参数的   
   
  鉴于ParameterizedThreadStart必要参数类型必须为object,所以定义的办法B形参类型必需为object。   
   
using System;   
using System.Collections.Generic;   
using System.Text;   
using System.Threading;   
   
namespace AAAAAA   
{   
  class AAA   
  {   
    public static void Main()   
  {     
    Thread t = new Thread(new ParameterizedThreadStart(B));   
    t.Start("B");   
    Console.Read();   
  }   
   
  private static void B(object obj)   
  {   
    Console.WriteLine("Method {0}!",obj.ToString ());   
  }   
  }   
}   
    
   
 结果呈现Method B!    
   
三、带四个参数的   
   
  由于Thread默许只提供了那三种构造函数,假诺急需传递多少个参数,大家能够和煦将参数作为类的性质。定义类的靶未时候实例化那么些脾性,然后开展操作。   
   
using System;   
using System.Collections.Generic;   
using System.Text;   
using System.Threading;   
   
namespace AAAAAA   
{   
  class AAA   
  {   
    public static void Main()   
  {   
  My m = new My();   
  m.x = 2;   
  m.y = 3;   
   
  Thread t = new Thread(new ThreadStart(m.C));   
  t.Start();   
   
  Console.Read();   
  }   
  }   
   //自定义的类,类中有四个性情,三个办法
  class My   
  {   
    public int x, y;   
   
    public void C()   
    {   
      Console.WriteLine("x={0},y={1}", this.x, this.y);   
    }   
  }   
}   
    
   
  结果呈现x=2,y=3      

      使用.NET大家得以很轻易的创办叁个线程,然则它提供的制造线程和运转线程的章程未有明了的提供参数,若是大家要用线程来运行类里面二个带参数的艺术该如何做?下边介绍三种格局。

 

 

      1.利用构造函数传递参数

一、不带参数的 

using System;  
using System.Collections.Generic;  
using System.Text;  
using System.Threading;  

namespace AAAAAA  
{  
  class AAA  
  {  
  public static void Main()  
  {  
  Thread t = new Thread(new ThreadStart(A));  
  t.Start();  

  Console.Read();  
  }  

  private static void A()  
  {  
  Console.WriteLine("Method A!");  
  }  
  }  
}  

      这种情势比较便于精晓,大家在实例化线程要运行方法所在类时将艺术所需的参数字传送递给类的构造函数,并将其赋值给类的分子变量,那样在措施中就足以选择该变量了,进而到达将参数传递给艺术的目标。

using System;  
using System.Collections.Generic;  
using System.Text;  
using System.Threading;  

namespace AAAAAA  
{  
  class AAA  
  {  
  public static void Main()  
  {  
  Thread t = new Thread(new ThreadStart(A));  
  t.Start();  

  Console.Read();  
  }  

  private static void A()  
  {  
  Console.WriteLine("Method A!");  
  }  
  }  
}

结果突显Method A! 

澳门新萄京官方网站 1澳门新萄京官方网站 2应用构造函数来传递参数的例证
    class ThreadParameters
    {
        public static void Main(string[] args)
        {
            AnimalShower dog = new AnimalShower("dog");
            AnimalShower cat = new AnimalShower("cat");

结果突显Method A! 

二、带二个参数的 
  由于ParameterizedThreadStart须求参数类型必需为object,所以定义的法子B形参类型必需为object。 

            Thread t1 = new Thread(new ThreadStart(dog.DoShower));
            Thread t2 = new Thread(new ThreadStart(cat.DoShower));

 

 

            t1.Start();
            t2.Start();

二、带贰个参数的  

using System;  
using System.Collections.Generic;  
using System.Text;  
using System.Threading;  

namespace AAAAAA  
{  
  class AAA  
  {  
  public static void Main()  
  {   
  Thread t = new Thread(new ParameterizedThreadStart(B));  
  t.Start("B");  

  Console.Read();  
  }  

  private static void B(object obj)  
  {  
  Console.WriteLine("Method {0}!",obj.ToString ());  

  }  
  }  
}  

            Console.ReadLine();
        }  
    }

鉴于ParameterizedThreadStart要求参数类型必需为object,所以定义的措施B形参类型必得为object。 

结果显示Method B! 

    //利用构造函数字传送递线程参数
    public class AnimalShower
    {
        private string name;

 

 

        public AnimalShower(string name)
        {
            this.name = name;
        }

using System;  
using System.Collections.Generic;  
using System.Text;  
using System.Threading;  

namespace AAAAAA  
{  
  class AAA  
  {  
  public static void Main()  
  {   
  Thread t = new Thread(new ParameterizedThreadStart(B));  
  t.Start("B");  

  Console.Read();  
  }  

  private static void B(object obj)  
  {  
  Console.WriteLine("Method {0}!",obj.ToString ());  

  }  
  }  
}

三、带四个参数的 
  由于Thread默许只提供了那三种构造函数,如若急需传递三个参数,大家能够团结将参数作为类的属性。定义类的指标时候实例化这几个特性,然后开展操作。 

        public void DoShower()
        {
            Console.WriteLine(this.name   " begin to shower");
            //线程随机Sleep一段时间,模拟管理进程
            Thread.Sleep(new Random().Next(1000, 2500)); 
            Console.WriteLine(this.name   " end to shower");
        }
    }

 

 

      2.接纳ThreadPool类来传递线程参数

结果彰显Method B! 

using System;  
using System.Collections.Generic;  
using System.Text;  
using System.Threading;  

namespace AAAAAA  
{  
  class AAA  
  {  
  public static void Main()  
  {  
  My m = new My();  
  m.x = 2;  
  m.y = 3;  

  Thread t = new Thread(new ThreadStart(m.C));  
  t.Start();  

  Console.Read();  
  }  
  }  

  class My  
  {  
  public int x, y;  

  public void C()  
  {  
  Console.WriteLine("x={0},y={1}", this.x, this.y);  
  }  
  }  
}  

      ThreadPool类提供一个由系统一保险证的线程池(能够视作三个线程的器皿)。ThreadPool类有三个静态方法QueueUserWorkItem,它将艺术排入队列以便试行,并钦点包罗该措施所用数据的指标。此措施在有线程池线程变得可用时实行。函数QueueUserWorkItem和委托WaitCallback原型如下:

 

结果展现x=2,y=3 

澳门新萄京官方网站 3澳门新萄京官方网站 4QueueUserWorkItem和WaitCallback原型
    /// <summary>
    /// 将艺术排入队列以便实践,并点名包罗该措施所用数据的目的。此格局在有线程池线程变得可用时进行。
    /// </summary>
    /// <param name="callBack">System.Threading.WaitCallback,它意味着要进行的秘诀</param>
    /// <param name="state">包蕴方法所用数据的目的</param>
    /// <returns>假诺将艺术成功排入队列,则为 true;否则为 false。</returns>
    public static bool QueueUserWorkItem(WaitCallback callBack, object state)

三、带多少个参数的  

 

    //表示线程池线程要实行的回调方法
    public delegate void WaitCallback(object state);

  由于Thread暗许只提供了那二种构造函数,假设急需传递八个参数,大家得以团结将参数作为类的习性。定义类的目的时候实例化那脾天性,然后开展操作。 

四、利用结构体给参数字传送值。 
概念公用的public struct,里面能够定义本身供给的参数,然后在必要丰裕线程的时候,能够定义结构体的实例。

       ThreadPool类适用于应用程序超过52%光阴成本在等候情况,等待某些事件的发出,然后给予响应,关于ThreadPool类更深刻的演讲能够参照新浪文章.NET 线程池编制程序手艺。下边是行使ThreadPool类完成线程参数字传送递的演示:

 

 

澳门新萄京官方网站 5澳门新萄京官方网站 6应用ThreadPool类来传递参数的自己要作为模范遵循规则
    class ThreadParameters
    {
        public static void Main(string[] args)
        {
            AnimalShower dog = new AnimalShower();
            AnimalShower cat = new AnimalShower();

using System;  
using System.Collections.Generic;  
using System.Text;  
using System.Threading;  

namespace AAAAAA  
{  
  class AAA  
  {  
  public static void Main()  
  {  
  My m = new My();  
  m.x = 2;  
  m.y = 3;  

  Thread t = new Thread(new ThreadStart(m.C));  
  t.Start();  

  Console.Read();  
  }  
  }  

  class My  
  {  
  public int x, y;  

  public void C()  
  {  
  Console.WriteLine("x={0},y={1}", this.x, this.y);  
  }  
  }  
}
//结构体  
  struct RowCol  
  {  
  public int row;  
  public int col;  
  };  

//定义方法  
public void Output(Object rc)  
  {  
  RowCol rowCol = (RowCol)rc;  
  for (int i = 0; i < rowCol.row; i  )  
  {  
  for (int j = 0; j < rowCol.col; j  )  
  Console.Write("{0} ", _char);  
  Console.Write("n");  
  }  
  } 

            ThreadPool.QueueUserWorkItem(new WaitCallback(new AnimalShower().DoShower), "dog");
            ThreadPool.QueueUserWorkItem(new WaitCallback(new AnimalShower().DoShower), "cat");

 

            Console.ReadLine();
        }  
    }

结果展现x=2,y=3 

    public class AnimalShower
    {
        public AnimalShower()
        {
        }

 

        //为了能实例化委托WaitCallback,参数用Object类型
        public void DoShower(object name)
        {
            Console.WriteLine(name.ToString()   " begin to shower");
            //线程随机Sleep一段时间,模拟管理进程
            Thread.Sleep(new Random().Next(1000, 2500)); 
            Console.WriteLine(name.ToString()   " end to shower");
        }
    }

四、利用结构体给参数字传送值。  

      3.用到ParameterizedThreadStart委托实例化Thread类

概念公用的public struct,里面能够定义自身须求的参数,然后在急需丰硕线程的时候,能够定义结构体的实例。

      ParameterizedThreadStart初步化Thread类的实例,钦赐允许对象在线程运营时传递给线程的寄托。利用.NET Framework 2.0版新添Thread的布局函数public Thread(ParameterizedThreadStart start)可将参数字传送递给ThreadInstance.Start(Object parameter)方法,轻松示比方下:

澳门新萄京官方网站如果在调用线程时传递参数,调用带参数函数。 

澳门新萄京官方网站 7澳门新萄京官方网站 8采纳ParameterizedThreadStart委托传递参数示例
        public static void Main(string[] args)
        {
            AnimalShower dog = new AnimalShower();
            AnimalShower cat = new AnimalShower();

//结构体  
  struct RowCol  
  {  
  public int row;  
  public int col;  
  };  

//定义方法  
public void Output(Object rc)  
  {  
  RowCol rowCol = (RowCol)rc;  
  for (int i = 0; i < rowCol.row; i  )  
  {  
  for (int j = 0; j < rowCol.col; j  )  
  Console.Write("{0} ", _char);  
  Console.Write("n");  
  }  
  }

            Thread t1 = new Thread(new ParameterizedThreadStart(dog.DoShower));
            Thread t2 = new Thread(new ParameterizedThreadStart(cat.DoShower));

 

            t1.Start("dog");
            t2.Start("cat");

            Console.ReadLine();
        }  
    }

    public class AnimalShower
    {
        public AnimalShower()
        {
        }

        //为了能实例化委托ParameterizedThreadStart,参数用Object类型
        public void DoShower(object name)
        {
            Console.WriteLine(name.ToString()   " begin to shower");
            //线程随机Sleep一段时间,模拟管理进度
            Thread.Sleep(new Random().Next(1000, 2500)); 
            Console.WriteLine(name.ToString()   " end to shower");
        }
    }

      计算:借使.NET Framework是2.0及以上版本,最棒是在后三种情势中做出抉择,因为第一种方式应用类的构造函数,破坏了类的封装性,何况有时期码会变的不便了解。假诺是.NET Framework是2.0以下版本,只可以在前边三种格局中做出取舍。

本文由澳门新萄京官方网站发布于www.8455.com,转载请注明出处:澳门新萄京官方网站如果在调用线程时传递参数

关键词:

  • 上一篇:没有了
  • 下一篇:没有了