недавно я разрабатывал приложение в Silverlight, которое использует загрузку.
Я использую класс WebClient
для связи с HttpHandler
, который находится на моем сервере. Методы, предоставляемые WebClient
, являются асинхронными и используют основанный на событиях APM: имея в виду, что цель Silverlight состоит в том, чтобы иметь гибкий пользовательский интерфейс, который не блокирует, как мне хотелось бы, ради удовольствия, попытаться сделать вызовы синхронными.
код
AutoResetEvent _uploadedEvent = new AutoResetEvent(false);
foreach (var item in _fileInfos)
{
WebClient client = new WebClient();
client.OpenWriteCompleted += (sender, e) =>
{
try
{
using (FileStream fs = item.OpenRead())
using (Stream stream = y.Result)
{
while (true)
{
byte[] buffer = new byte[8192];
int readBytes = fs.Read(buffer, 0, buffer.Length);
if (readBytes == 0)
break;
stream.Write(buffer, 0, readBytes);
}
}
}
finally
{
_uploadedEvent.Set();
}
};
client.OpenWriteAsync(new Uri(_receiverUri));
_uploadedEvent.WaitOne();
}
Проблема
Этот способ сделать синхронные вызовы не работает в Silverlight, но работает в WPF.
Сейчас я замечаю, что у меня не одна такая проблема: https://stackoverflow.com/questions/3819650/silverlight-httprequest-thread-problem
Как вы думаете, в чем проблема?
Заранее спасибо.
AS-CII.