舞蹈晚会背景墙:多线程传参(可带返回值)
来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 19:16:21
多线程传参(可带返回值)
.NET2005(c #) 2008-05-06 09:55:56 阅读88 评论0 字号:大中小 订阅
问题解决思路:
编写一个子线程类,该类的构造函数由主线程中的变量来初始化,该类中有一个方法为子线程的工作执行方法,该类中有一个result属性用于返回子线程工作执行方法的处理结果。
private void button1_Click(object sender, EventArgs e)
{
//用主线程中的变量SN_Server,SN去初始化一个Th_Snvalid序列号线程验证类
Th_Snvalid Snvalid = new Th_Snvalid(SN_Server, SN);
Th_sub = new Thread(Snvalid.Sn_valid);//用类中的一个方法去初始化子线程
Th_sub.Start();
T h_sub.Join();//阻止主线程,直到Th_sub线程执行完毕
result=Snvalid.Result;//用类的一个结果属性去赋值给主线程的变量。
}
class Th_Snvalid
{
private string SN_Server;
private string SN;
private string result;
public string Result //返回值其实是类的一个属性
{
get
{
return result;
}
set
{
result = value;
}
}
public Th_Snvalid(string SN_Server,string SN)
{
this.SN_Server = SN_Server;
this.SN = SN;
}
public void Sn_valid()//子线程所要执行的函数
{
Sql sql=new Sql();
try
{
sql.setSqlconn("Data Source=" + SN_Server + ";Initial Catalog=Soft_sn_whb;User ID=sa;PWD=smssilvcom");
sql.setSqlcmd("select count(soft_sn) from Soft_sn where soft_sn='" + SN + "' and soft_able=1");
if (Int16.Parse(sql.ExecuteScalar()) == 0)//如果序列号非法
{
result = "软件序列号无效,请联系软件发行者!";
}
else
{
result = "请填写系统登陆信息 ...";
}
}
catch (SqlException)
{
result = "无法连接序列号服务器,请检查网络!";
}
finally
{
sql.Dispose();
}
}
}