---------------------- 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培训、期待与您交流! ----------------------