当我尝试在第一个方法中单击按钮时,它正在为loop.But创建异步http请求,我不能将参数传递给异步回调函数。我想做一些事情,我想使用POST方法在for循环中发送ID。
void Button3Click(object sender, EventArgs e)
{
for(int i = Convert.ToInt32(startno3.Text); i<Convert.ToInt32(endno3.Text); i++) {
ASCIIEncoding encoding=new ASCIIEncoding();
string postData="id=1";
qstr3 = encoding.GetBytes(postData);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost/ornek/1.php");
if(key1.Text!="") {
request.Headers.Add("Cookie", "PHPSESSID=" + key1.Text);
}
request.Method = "POST";
request.ContentType="application/x-www-form-urlencoded";
request.ContentLength = data.Length;
IAsyncResult asyncResult = request.BeginGetResponse( new AsyncCallback(EndScanFeeds), request);
}
}
public void EndScanFeeds(IAsyncResult result) {
HttpWebRequest request = null;
HttpWebResponse response = null;
Stream stream = null;
StreamReader streamReader = null;
try {
request = (HttpWebRequest)result.AsyncState;
response = (HttpWebResponse)request.EndGetResponse(result);
stream = response.GetResponseStream();
streamReader = new StreamReader(stream);
string feedData = streamReader.ReadToEnd();
response.Close();
stream.Close();
streamReader.Close();
MessageBox.Show(feedData);
}
catch(Exception ex) {
throw(ex);
}
finally {
if(response != null)
response.Close();
if(stream != null)
stream.Close();
if(streamReader != null)
streamReader.Close();
}
} c发布于 2011-07-29 19:36:01
您需要将ID作为查询字符串参数添加到HttpWebRequest中(在设置qstr3之后,您不会对它做任何操作)。
当您设置ContentType和ContentLength时,您并没有向它传递任何实际内容。
但是让我担心的是并行地触发(潜在地)许多简单的异步HttpWebRequests。如果它们的数量很多,我预计会有不好的事情发生。
考虑一下这是不是正确的方法。可以将1.php修改为一次接受多个ID吗?
发布于 2011-07-29 19:54:43
为什么你不能把参数传递给你的函数?您使用request作为BeginGetResponse的第二个参数-您可以实际传递任何自定义对象来代替它,同时保存您的参数和对请求的引用,并将result.AsyncState转换为该对象类型,而不是转换为HttpWebRequest。
但实际上,如果你需要发送你的id,你需要在你的异步request.BeginGetResponse操作之前获取请求流-例如,从你的请求中获取GetRequestStream()并在其中写入数据(或者再次作为异步操作)。
https://stackoverflow.com/questions/6872435
复制相似问题