私のアプリケーションは、WebRequestを使用してWebページからデータを取得することがよくありますが、取得中にボタンなどをクリックすることはできません。スレッド/バックグラウンドワーカーを使用しなければならないことを理解しましたが、正しく動作させることはできません。 GUIの応答性は向上しません。データの取得中にGUIが応答しない
それは私のアプリケーションunrespondingを作る停止するように私は、上のスレッドのいくつかの種類を適用したいコード:
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、私はそれにかなり類似した何かをしようとした、ありがとう。しかし、そのようなバックグラウンド労働者を使用して私の問題は、どのようにして(私の場合はSQLGetで、あなたのケースでは)StartQueryを呼び出す関数にqueryResultを戻すのですか?
私の例では、返された文字列は、文字列が内部で呼び出されたvoidのローカル変数として使用されます。
同時に多数のクエリが存在する可能性があるので、グローバル変数に割り当てることを危険にさらしたくありません。ここで
あなたがスレッドを開始し、 'SQLGet'を実行するコードを投稿してください。 –
スレッドを使用していない現時点では、私はそれらを実装する方法がわからないので、スレッドを使用します。それが私が助けを求めている理由です。 – Phoexo
あなたの編集に合わせて私の答えが更新されました。 –