当前位置:编程学习 > C#/ASP.NET >>

线程池thread.pool中的委托WaitCallback能不能返回结果

使用线程池中我们使用WaitCallback时不需返回,方法一般都采用了空类型(使用VOID),但是我现在手上有一个方法,因为并发量很大,所以想使用线程池,同时这个方法是有返回类型的(返回的是字符串)。请问我怎么在WaitCallback中使得结果将以string类型返回。
方法如下:
   public string getDataFromProc(string dataTableName)
        {
                String xml = "";
                DataTable db2 = new DataTable();
                XmlAnalysis al = new XmlAnalysis();
                DataTable db = al.stringToDataTable(dataTableName);

                Checkings ck = new Checkings();
                Control cl = new Control();
                bool b = ck.getAuthCode(db.Rows[0][0].ToString(), db.Rows[0][1].ToString());

                if (b)
                {
                    cl.AddParameter("@install", db.Rows[1][1].ToString());
                    for (int i = 2; i < db.Rows.Count; i++)//
                    {
                        cl.AddParameter("@" + db.Rows[i][0].ToString(), db.Rows[i][1].ToString());
                    }

                    db2 = cl.SelectToProc(db.Rows[1][0].ToString(), "");

                }//修改成功,添加成功,删除成功

                DataToXml dx = new DataToXml();
                UTF8Encoding utf8 = new UTF8Encoding();

                Byte[] encodedBytes = utf8.GetBytes(dx.DataTableToXml(db2));
                String decodedString = utf8.GetString(encodedBytes);

                //UrlEncode(dx.DataTableToXml(db2), Encoding.UTF8);
                return decodedString;
         } --------------------编程问答-------------------- WaitCallback只能带一个object类型的参数,没有任何返回值。可以利用委托。 --------------------编程问答-------------------- lz描述的不是很清楚,我现在假设不适用线程是这样的。

for (int i = 0; i< 10; i++)
{
    string result = getDataFromProc(dataTableName);
    Dosomething(result);
}
改成线程池

 System.Threading.WaitCallback waitCallback = new WaitCallback ( MyThreadWork );
for(int i = 0;i<10;i++)
{
     ThreadPool.QueueUserWorkItem ( waitCallback, dataTableName );
}

 public static void MyThreadWork ( object state ) {
     string dataTableName = state as string;
     string result = getDataFromProc(dataTableName);
     Dosomething(result);
}
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,