WebClientを使用してサーバーからJSONデータを取得しています。そして、私はそれが同期したい(はい、私はWPですべてが非同期でなければならないが、私はそれが何らかの理由で同期が必要)知っている。私のクラスでは、私はこのようなコードを持っています:WebClient - 大きなデータで応答を同期
private WebClient _webClient;
private string _acctualResponse;
private AutoResetEvent _lock = new AutoResetEvent(false);
void _webClient_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e)
{
_acctualResponse = e.Result;
_lock.Set();
}
public string _message;
public string SendString(string URL, string message)
{
_webClient.UploadStringAsync(new Uri(URL), message);
_lock.WaitOne();
return _acctualResponse;
}
私のプログラムでは、いくつかの異なるデータセットを得るために使用しています。そして、すべてが正常に動作し、戻りデータは小さくなります。より大きいデータ(base64で3 img)を取得する必要がある場合、イベントは開始しません。 でも! _lockを削除したとき、イベントは常にSendString
機能が終了してから瞬間を開始します。応答を待つために他のメカニズムを使用しようとしています。 while
ループ:
private void WaitForResponse()
{
_acctualRequestTime = 0;
_acctualResponse = null;
while (!_uploadComplet && _acctualRequestTime < Timeout)
{
int slepTime = 200;
Thread.Sleep(slepTime);
_acctualRequestTime += slepTime;
}
_uploadComplet = false;
}
が[もちろん、イベントで私がtrueに_uploadComplete
フラグを設定しました] EFECTが同じであった:応答は関係なく、間隔が設定されたものタイムアウト、タイムアウト後に短いが来ませんでした。 私はこの状況で少し混乱しています。私は悪いことを知っていますか?
あなたは予想される非同期設計思想に反抗していますが、その理由は言わないでください。おそらくあなたはあなたの理由を書き上げることができます。そして、私たちはあなたの問題を解決する答えを与えることができますが、これらのフープを飛び越える必要はありませんか? –