下载文件时 Silverlight 变得无响应

Silverlight becomes unresponsive when downloading a file

我正在尝试使用以下代码片段通过 Silverlight 中的 SaveFileDialog 下载文件:

    public void SaveMediaLocal(string fileName)
    {
        FileInfo fInfo = new FileInfo(fileName);
        if (fInfo.Exists)
        {
            if (fInfo.Length > 0)
            {
                string extension = fInfo.Extension;
                SaveFileDialog dialog = new SaveFileDialog()
                {
                    DefaultExt = extension,
                    Filter = String.Format("{1} files (*.{0})|*.{0}|All files (*.*)|*.*", extension, fInfo.Extension),
                    FilterIndex = 1,
                    DefaultFileName = fInfo.Name
                };
                if (dialog.ShowDialog() == true)
                {                       
                    try
                    {
                        bool cancelFlag = false;
                        byte[] buffer = new byte[1024 * 1024]; // 1GB buffer
                        using (FileStream dest = (FileStream)dialog.OpenFile())
                        {
                            using (FileStream source = new FileStream(fInfo.FullName, FileMode.Open, FileAccess.Read))
                            {
                                long fileLength = source.Length;
                                long totalBytes = 0;
                                int currentBlockSize = 0;

                                while ((currentBlockSize = source.Read(buffer, 0, buffer.Length)) > 0)
                                {
                                    totalBytes += currentBlockSize;
                                    double percentage = (double)totalBytes * 100.0 / fileLength;

                                    dest.Write(buffer, 0, currentBlockSize);
                                }
                            }
                        }
                    }
                    catch
                    {

                    }                        
                }
            }
            else
            {
                //no results
            }
        }
    }

当我使用这段代码时; Silverlight 冻结,直到下载完成。 当我改为使用此代码段时,UI 有响应,但不适用于更大的文件。

                        using (Stream stream = dialog.OpenFile())
                    {

                        Byte[] bytes = File.ReadAllBytes(fileName);
                        stream.Write(bytes, 0, bytes.Length);
                    }

我在这里遗漏了什么吗?

不要在GUI线程上进行操作。这就是它变得反应迟钝的原因。创建一个新线程或异步进程并在 background.

中执行操作