我的应用程序经常使用 WebRequest 从网页中获取数据,但是在获取时无法单击按钮等。我知道我必须使用线程/后台工作者,但我无法让它正常工作;它不会使 GUI 更具响应性。
我想应用某种线程的代码,以便它停止使我的应用程序无响应:
public string SQLGet(string query)
{
string post = "q=" + query;
WebRequest request = WebRequest.Create("http://test.com");
request.Timeout = 20000;
request.Method = "POST";
byte[] bytes = Encoding.UTF8.GetBytes(post);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = bytes.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(bytes, 0, bytes.Length);
requestStream.Close();
WebResponse response = request.GetResponse();
requestStream = response.GetResponseStream();
StreamReader reader = new StreamReader(requestStream);
string ret = reader.ReadToEnd();
reader.Close();
requestStream.Close();
response.Close();
return ret;
}
编辑:谢谢你,lc,我试过类似的东西。但是我这样使用后台工作人员的问题是;如何将 queryResult 返回到调用(在我的情况下为 SQLGet,在你的情况下)StartQuery 的函数?
在我的示例中,返回的字符串将用作 void 中的局部变量,该字符串在内部被调用。
并且可能同时有很多查询,所以我不想冒险将它分配给全局变量。