Я использую WebClient для получения некоторых данных JSON с сервера.И я хочу, чтобы это было синхронно (да, я знаю, что в WP все должно быть асинхронно, но мне нужна синхронизация по некоторым причинам).В моем классе у меня есть такой код:
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;
}
В моей программе я использую его, чтобы получить несколько разных наборов данных.И все работает хорошо, в то время как возврат данных невелик.Когда мне нужно получить больше данных (3 img в base64), события не начинаются.НО!когда я удаляю _lock, событие всегда начинается через мгновение после завершения функции SendString
.Я пытаюсь использовать некоторые другие механизмы для ожидания ответа, например, while
loop:
private void WaitForResponse()
{
_acctualRequestTime = 0;
_acctualResponse = null;
while (!_uploadComplet && _acctualRequestTime < Timeout)
{
int slepTime = 200;
Thread.Sleep(slepTime);
_acctualRequestTime += slepTime;
}
_uploadComplet = false;
}
[конечно, если я установил _uploadComplete
flag в true] Efect был тем же: ответ пришелчерез некоторое время, независимо от того, какой интервал был установлен.Я немного смущен этой ситуацией.Ты знаешь, что я делаю плохо?