C# 多线程获得返回值

publicstaticstringstrState="";//定义获取返回值///<summary>///开启线程读取url返回字符串///</summary>///<... public static string strState=""; //定义获取返回值
/// <summary>
/// 开启线程读取url返回字符串
/// </summary>
/// <param name="strUrl">传入的url</param>
/// <param name="parm">参数信息</param>
/// <returns></returns>
public string ThreadTryRequest(string strUrl, string parm)
{
Thread thrOne = new Thread(this.ThreadProc); //创建线程
ThreadParameter parameter = new ThreadParameter(); //实例化ThreadParameter对象,并赋值
parameter.StrUrl = strUrl.ToString();
parameter.parm = parm.ToString();
thrOne.Start(parameter); //开启线程

return strState; //返回字符串
}

/// <summary>
/// 读取url获得字符串方法
/// </summary>
/// <param name="threadPar">封装的ThreadParameter对象</param>
private void ThreadProc(object parameter)
{
ThreadParameter tp = (ThreadParameter)parameter; //把Obj类型的threadPar转换成ThreadParameter对象,并赋值
string strurl = tp.StrUrl;
string parm = tp.parm;
HttpWebResponse response;
WebRequest request;
try
{
request = WebRequest.Create(strurl);
request.Credentials = CredentialCache.DefaultCredentials;
request.Method = "POST";
byte[] postData = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(parm); //Post的数据
request.ContentLength = postData.Length;
Stream postStream = request.GetRequestStream();
postStream.Write(postData, 0, postData.Length);
postStream.Close();
response = (HttpWebResponse)request.GetResponse();
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream, System.Text.Encoding.UTF8);
string responseFromServer = reader.ReadToEnd();
strState = responseFromServer.ToString();
reader.Close();
dataStream.Close();
response.Close();
}
catch
{

strState = "-1";
}

}

我想获得方法中返回的字符串 但现在的方法获得不到 请高手代码讲下
public string ThreadTryRequest(string strUrl, string parm)
想获得这方法中的字符串 其它页面都调用这个方法 现在是不知道怎么获取返回的字符串

回复 小贼飞飞 我上面的代码 public static string strState=""; //定义获取返回值的静态变量
在执行ThreadProc方法之后把值赋给了strState 但是得不到这个值。。
展开
 我来答
百度网友f3d73f2
2010-03-18 · 超过18用户采纳过TA的回答
知道答主
回答量:43
采纳率:0%
帮助的人:41.5万
展开全部
如果用多线程的话,相直接获取是没有办法的,因为这个程序是在另一个线程中执行的,当前线程会不等它执行完,就把后面的代码执行掉了

变通的方法,把这个方法执行的结果赋值给一个静态变量,然后读取这个静态变量的值~~~

如果有多个值,你可以把这些值放到一到静态的数组或是hashtable中~~~

其实你这个思路是错误的:
根据你的说明,你是想在每个页面都有去执行这个方法,而且还要获取结果。
1、这个线程和你的当前页面不在同一个线程,当前页面并不知道你这个ThreadTryRequest在别的线程中是什么样的状态,当前页面的代码也不会等你这个这个线程执行完就执行掉了,所以你不可能马上拿到这个线程的值的。
2、你这个应用,明显不该用异步的线程来执行,如果要用同步模式,我不知道你这个是为了什么目的把它放到线程中执行,因为你用同步模式,你想等这个线程的执行结果,等的时间和在页面顺序执行是一样的甚至更多~~~

你可以说一下你的目的是什么吗? 就你的描述来看,你根本没必要用线程。。。

从你的代码来看,你可能是想提高页面打开速度,把执行慢的代码放到线程中执行。。。 如果从这个思路来看是对的,不过光这样可不用,你还得用缓存,把执行结果放到缓存中再由线程或是线程池来维护。。。

总之,在一个页面中执行这么低效率的代码,整个解决方案就有问题。。。

===================================================================

public string ThreadTryRequest(string strUrl, string parm)
{
Thread thrOne = new Thread(this.ThreadProc); //创建线程
ThreadParameter parameter = new ThreadParameter(); //实例化ThreadParameter对象,并赋值
parameter.StrUrl = strUrl.ToString();
parameter.parm = parm.ToString();
thrOne.Start(parameter); //开启线程

return strState; //返回字符串
}

你想在这里就获取到值? 那是获取不到的.... return strState; 执行了
this.ThreadProc(parameter) 还没执行完了,这个时候strState 还没被赋值,
所以我说你的思路是错误的....

你想当时就知道一个线程的执行结果,除非你等~~~ 要不获取不到的~~~
lstkkk
2010-03-18 · 超过54用户采纳过TA的回答
知道小有建树答主
回答量:210
采纳率:0%
帮助的人:0
展开全部
这个,我建议你使用监听线程

就是启动第三个线程监听结果
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式