c# - Silverlight 4 线程问题

标签 c# multithreading silverlight events

最近我在 Silverlight 中开发了一个使用上传的应用程序。
我使用 WebClient 类与服务器中的 HttpHandler 进行通信。 WebClient 提供的方法是异步的,并使用基于事件的 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。

最佳答案

Silverlight 需要与 UI 线程会合才能执行 Web 请求,但 UI 线程在 WaitOne 调用时被阻塞,因此出现了死锁。 (这可以解释为 Silverlight 的“功能”。)

关于c# - Silverlight 4 线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4203590/

相关文章:

c# - SpeechRecognitionEngine.AudioLevel 不变

multithreading - 启用优化后,带有衍生线程的程序会出现困惑

java - 聊天客户端 - 同时使用套接字和服务器套接字

java - Java中的多线程(并行代码比串行慢得多)

silverlight - 模拟用户进行 Silverlight 单元测试

WPF 到 silverlight xaml 问题

javascript - 在 ASP Gridview 删除命令中使用 JavaScript 提示来存储 "Reason for Deletion"

c# - NLog 到企业库

c# - 想要在文本 block 中显示 slider 的值?

c# - 参数异常 : Empty path not allowed