最近我在Silverlight中开发了一个使用上载的应用程序。
我用
WebClient
类与通信
HttpHandler
在我的服务器上。所提供的方法
网络客户端
是异步的,使用基于事件的APM:记住Silverlight的作用域是拥有一个不阻塞我想要的流畅的UI,为了好玩,尝试使调用同步。
代码
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。