舞蹈晚会背景墙:多线程传参(可带返回值)

来源:百度文库 编辑:九乡新闻网 时间: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();              

            }        
        }
    }