【黑马程序员】多线程的带参方法

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------


多线程的实现是让程序的主界面可以被操作的同时,也可以执行其它的代码,从而产生相应的功能。这些代码一般是放在方法里面,这个方法可以是无参方法,也可以是有参方法。当使用无参方法时,我们可以直接用Start()方法启动线程,但如果是有参方法,我们需要给Start()方法传入一个参数,并且在创建带参方法的线程的时候,不能直接把该方法传给该线程,否则会报错,如图所示:

我们先来查看Thread类的构造函数,如图所示,构造函数的参数有带参数的委托,也有不还参数的委托,这里没有问题。

再来看看图中红色方框部分的参数类型ParameterizedThreadStart,这是一个带参委托,如下图所示:

但这个委托需要的参数是object类型的。而我们之前ShowTextName()方法的参数是string类型的,所以这是参数的类型不匹配。因此我们要把ShowTextName()方法的参数类型改为object类型的。

我们先用Start()方法启动线程,这样会报错,如图所示:

原因是我们没有给Start()方法传参数,那么ShowTextName()方法里面的参数name也就为null,无法ToString()。因此我们要在ShowTextName()方法里面加一个判断:如果name为null,就输出null;否则就输出name.ToString()。这样,这个带参方法的线程就可以运行了。

前面是带一个参数的线程,如果有多个参数呢?我们可以用一个集合来存储这个参数。代码如下所示:

/// <summary>
        /// 带参方法
        /// </summary>
        /// <param name="name"></param>
        private void ShowTextName(object name)
        {
            List<string> list = name as List<string>;
            if (name != null)
                foreach (string item in list)
                {
                    MessageBox.Show(item);
                }
            else
                MessageBox.Show("null");
        }

        /// <summary>
        /// 多线程的带参方法按钮事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnMethodWithParam_Click(object sender, EventArgs e)
        {
            Thread thread = new Thread(ShowTextName);
            thread.Start(new List<string>() { "刘德华","成龙","李连杰"});

        }
然后运行程序,点击按钮。程序会连续弹出三个消息框,分别显示三个名字。如下图:



---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值