我正在使用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;
}
在我的計劃,我用它來得到一些不同的數據集。一切正常,而返回數據很小。當我必須獲得更大的數據(3個img base64),事件不是開始。 但是! 當我刪除_lock時,事件總是在SendString
函數結束後開始片刻。我嘗試使用一些其他機制等待響應,例如while
循環:
private void WaitForResponse()
{
_acctualRequestTime = 0;
_acctualResponse = null;
while (!_uploadComplet && _acctualRequestTime < Timeout)
{
int slepTime = 200;
Thread.Sleep(slepTime);
_acctualRequestTime += slepTime;
}
_uploadComplet = false;
}
[當然,在事件中,我被_uploadComplete
標誌設置爲true] 效應是相同的:反應過來一個短暫停後,不管是什麼超時間隔設置。 我對這種情況有點困惑。你知道我做得不好嗎?
你在與異步設計理念相悖,但你不明白爲什麼。也許你可以爲此寫下你的理由,我們可以給你一個解決你的問題的答案,但不要求你跳過這些圈套? – 2012-04-02 09:46:15