线程池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#