打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C#线程单参数的传递

一般每个线程都具有固定的任务。
有时候在一个系统中,多个任务只有一点点的区别,比如任务1每秒打印一句“hello tom”,任务2每秒打印一个“hello jerry”,这种情况下完全没有必要写两个static函数(占用内存),而且如果以后还有cherry、nancy等人的问候语,这个时候就需要用到函数参数传递了。

csharp中的直接参数传递实际很容易,但是只能传递一个参数。
先定一个线程函数:

 static void ThreadMethod(object obj)        {            if (obj != null)            {                string str = obj as string;                while (true)                {                    Console.Write("hello " + str + "\r\n");                    Thread.Sleep(1000);                }            }        }

传入参数类型必须是object类型, Object类是一个特殊的类,是所有类的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类。
所以对于线程来说,不管你传进来是什么类型,反正我里面都先把你当作obj类型来接收,如果你说你是string类型?那好的,我就把你当作是string类型:

string str = obj as string;

这样就完成了变量的接收了。
参数的传递操作也很简单:

 string a = "tom ";Thread th = new Thread(ThreadMethod); //创建线程th.Start(a); //启动线程

这样就可以完成参数的传递了。
我们看下面一个程序:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Threading;namespace test{    class Program    {               static void ThreadMethod(object obj)        {            if (obj != null)            {                string str = obj as string;                while (true)                {                    Console.Write("hello " + str + "\r\n");                    Thread.Sleep(1000);                }            }        }        static void Main(string[] args)        {                        string a = "tom ";            int b = 2;            Thread th = new Thread(ThreadMethod); //创建线程            Thread th2 = new Thread(ThreadMethod);            th.Start(a); //启动线程            th2.Start(b);            Console.Write("main start\r\n");            for (int i = 0; i < 10; i++)            {                Console.Write(i + "\r\n");                Thread.Sleep(1000);            }            Console.Write("main end\r\n");            th.Abort();            th2.Abort();            Console.ReadKey();        }    }}

上面的代码中,线程调用了两次,控制台应该可以看到“hello tom”和“hello 2”,发现2好像并没有传进来。


尝试把string改成int,爆出了int不具备null的错误,所以这里只能穿具有null属性的变量类型,如obj、string,当然还有class。

对于多个参数传递,可以定义一个class,其中的成员函数包含我们所需要的所有参数,这样虽然名义上只传递了一个class变量,实际已经完成了多变量传递。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C#多线程参数传递 | Intel? Developer Zone
C#子线程执行完后通知主线程的方法
多线程 thread和Task的用法以及注意事项
深入浅出多线程系列之二:关于Thread的那些事
C#中的多线程使用
C# 多线程参数的使用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服