Мое приложение часто извлекает данные с веб-страницы с помощью WebRequest, но невозможно нажимать кнопки и т. д. во время выборки. Я понял, что мне нужно использовать потоки/фоновый рабочий процесс, но я не могу заставить его работать должным образом; это не делает графический интерфейс более отзывчивым.
Код, к которому я хочу применить какую-то многопоточность, чтобы приложение перестало отвечать на запросы:
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?
В моем примере возвращаемая строка будет использоваться как локальная переменная в пустоте, внутри которой вызывается строка.
И запросов может быть много одновременно, поэтому я не хочу рисковать присваивать его глобальной переменной.
SQLGet
. - person John Kugelman   schedule 09.07.2009