C# 线程相关基础知识

参考文章:

C#多线程和异步(一)——基本概念和使用方法 https://www.cnblogs.com/wyy1234/p/9166444.html
C#多线程和异步(二),NET4.5 Taskl方法 https://www.cnblogs.com/wyy1234/p/9172467.html
C#多线程 [1] https://www.cnblogs.com/dotnet261010/p/6159984.html
C#多线程和线程池 [2] https://www.cnblogs.com/wwj1992/p/5976096.html
普通线程、线程锁 https://blog.csdn.net/weixin_50188452/article/details/114965110

消息队列中间件 C#调用RabbitMQ实现消息队列: https://www.cnblogs.com/mq0036/p/11726733.html

普通线程带参

无参启动

 class Program
   {
       static void Main(string[] args)
       {
           ThreadTest test = new ThreadTest();
           //无参调用实例方法
           Thread thread1 = new Thread(test.Func2);
           thread1.Start();
           Console.ReadKey();
       }
   }

   class ThreadTest
   {
       public void Func2()
       {
           Console.WriteLine("这是实例方法");
       }
   }

带一个参数,对象传参

class Program
   {
       static void Main(string[] args)
       {
           ThreadTest test = new ThreadTest();
           //有参调用实例方法,ParameterizedThreadStart是一个委托,input为object,返回值为void
           Thread thread1 = new Thread(new ParameterizedThreadStart(test.Func1));
           thread1.Start("有参的实例方法");
           Console.ReadKey();
       }
   }
   class ThreadTest
   {
       public void Func1(object o)
       {
           Console.WriteLine(o);
       }
   }

带多个参数,对象传参

static void Main(string[] args)
{
    MyThread myThread = new MyThread();
    myThread.id = i + 1;
    myThread.name = "张三" + i;
    myThread.money = 1000 + i;
    Thread thread = new Thread(myThread.ThreadMain);
    thread.Start();
}
//参数类型实例化
public class MyThread
{
   public int id { set; get; }
   public int money { set; get; }
   public string name { set; get; }

   public void ThreadMain()
   {
       int threadId = Thread.CurrentThread.ManagedThreadId;
       Console.WriteLine("线程ID {0}   {1}  {2}  {3}", threadId, id, money, name);
   }
}

异步线程传参

普通线程等待,不卡UI方法

让你的线程等待mm毫秒,期间不会造成程序界面卡死。
把原来调用Thread.Sleep的地方调用这个就可以了

public static void Delay(int mm)
        {
            DateTime current = DateTime.Now;
            while (current.AddMilliseconds(mm) > DateTime.Now)
            {
                Application.DoEvents();
            }
            return;
        }
posted @ 2022-08-31 11:20  Topi  阅读(35)  评论(0)    收藏  举报