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;
}
efect에도이 동일 [물론, 경우에 내가 참으로 _uploadComplete
플래그를 설정되었다] : 응답은 상관없이 어떤 설정된 제한 시간 간격, 타임 아웃 후 짧은왔다 없습니다. 나는이 상황에 약간 혼란 스럽다. 내가 뭘 잘못하고 있는지 알아?
예상되는 비동기 디자인 철학에 맞서고 있지만 왜 그런지 말하지는 않습니다. 어쩌면 당신은 그 이유를 쓸 수 있고, 우리는 당신에게 당신의 문제를 해결하는 대답을 줄 수 있지만, 당신이이 농구를 뛰어 넘을 필요는없는 것입니까? –