zoukankan      html  css  js  c++  java
  • C#多线程(入门篇)

    昨天一同学问我相关多线程的东西,真是菜鸡互啄呀!我想想还是自己整理整理吧,也是复习下。菜鸟勿喷!

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.Threading;
      6 using System.Runtime.Remoting.Messaging;
      7 
      8 namespace ThreadTest
      9 {
     10     public delegate void DelegateHandler(string a, string b);
     11     public class Program
     12     {
     13         static void Main(string[] args)
     14         {
     15             //创建线程原始写法,每次启用新的线程都要实例化一个Thread对象
     16             Thread threadA = new Thread(new ThreadStart(PrintA));
     17             threadA.Start();
     18 
     19             //创建一个线程,没区别,c#的语法糖写法(本人一直用的这个)
     20             Thread threadB = new Thread(PrintB);
     21             threadB.Start();
     22 
     23             //最简化写法
     24             new Thread(PrintC).Start();
     25 
     26             /*
     27              * Task在.net 4.0后代替了ThreadPool(线程池)
     28              * 程序员嫌每次启动一个线程麻烦,则先new多个线程放到线程池里,
     29              * 可以理解为放到一个List里(泛型:List<Thread>),调用函数的时候则从List中取出一个空闲的线程
     30              * 执行完毕再放回去。
     31             */
     32             System.Threading.Tasks.Task.Factory.StartNew(PrintD);
     33 
     34             //带一个参数,函数参数一定要是object对象
     35             Thread threadN = new Thread(PrintN);
     36             threadN.Start("N");
     37 
     38             //带一个参数,函数参数一定要是object对象
     39             Thread threadM = new Thread(new ParameterizedThreadStart(PrintN));
     40             threadM.Start("M");
     41 
     42             /*
     43              *带多个参数
     44              *方法1:参数放数组里传递
     45              *方法2:新建个无参方法,来调用多参数函数,参数在无参方法里传值(个人认为最笨方法)
     46              *方法3:新建个类,把被调用的函数和多个参数写在这个类里,主程序调用(与方法2如出一辙)
     47              *方法4:委托
     48              *网上还有好多其他方法,这里用委托来实现下
     49             */
     50             DelegateHandler dh = new DelegateHandler(PrintQ);
     51             dh("P", "Q");
     52 
     53             for (int i = 0; i < 1000; i++)
     54             {
     55                 Console.Write("X");
     56             }
     57             Console.ReadKey();
     58         }
     59         #region Print
     60         static void PrintA()
     61         {
     62             for (int i = 0; i < 1000; i++)
     63             {
     64                 Console.Write("A");
     65             }
     66         }
     67 
     68         static void PrintB()
     69         {
     70             for (int i = 0; i < 1000; i++)
     71             {
     72                 Console.Write("B");
     73             }
     74         }
     75 
     76         static void PrintC()
     77         {
     78             for (int i = 0; i < 1000; i++)
     79             {
     80                 Console.Write("C");
     81             }
     82         }
     83 
     84         static void PrintD()
     85         {
     86             for (int i = 0; i < 1000; i++)
     87             {
     88                 Console.Write("D");
     89             }
     90         }
     91 
     92         static void PrintN(object obj)
     93         {
     94             for (int i = 0; i < 1000; i++)
     95             {
     96                 Console.Write(obj.ToString());
     97             }
     98         }
     99 
    100         static void PrintQ(string a, string b)
    101         {
    102             for (int i = 0; i < 1000; i++)
    103             {
    104                 Console.Write(a + b);
    105             }
    106         }
    107         #endregion
    108     }
    109 }

    更多代码,更新ing...

  • 相关阅读:
    OpenMP并行程序设计
    Snmp在Windows下的实现WinSNMP编程原理
    利用C#开发基于snmpsharpnet基础的SNMP开发应用
    SNMP用VC实现的方法
    题目
    C# combox问题
    网络管理Snmp
    error BK1506
    响应activex事件
    使用C# 连接不同版本的Oracle.DataAccess
  • 原文地址:https://www.cnblogs.com/gothic/p/5830381.html
Copyright © 2011-2022 走看看