Macos 文件保存时,Silverlight应用程序在Mac上冻结

Macos 文件保存时,Silverlight应用程序在Mac上冻结,macos,silverlight,freeze,Macos,Silverlight,Freeze,启动SaveFileDialog然后保存数据的代码非常简单。 打开提示,我可以选择保存位置,它保存文件,然后整个选项卡/应用程序冻结。显然,在Windows/IE上工作正常。有什么建议吗 private void SavePDFFile() { var saveFileDialog = new SaveFileDialog {

启动
SaveFileDialog
然后保存数据的代码非常简单。 打开提示,我可以选择保存位置,它保存文件,然后整个选项卡/应用程序冻结。显然,在Windows/IE上工作正常。有什么建议吗

private void SavePDFFile()
        {
            var saveFileDialog = new SaveFileDialog
                                     {
                                         DefaultExt = "pdf",
                                         Filter = string.Format("Document(.{0})|*.{0}", "pdf"),
                                         FilterIndex = 1,
                                         DefaultFileName = DateTime.Now.ToString("HHmmMMddyyyy")
                                     };

            var saveClicked = saveFileDialog.ShowDialog();
            if (!saveClicked.HasValue || !saveClicked.Value) return;
            var fileStream = saveFileDialog.OpenFile();

            try
            {
                this.IsBusy = true;
                fileStream.Write(this.PDFData, 0, this.PDFData.Length);
                fileStream.Close();
            }
            catch (Exception ex)
            {
                this.DisplayErrorMessage("Error saving PDF file", ex);
            }
            finally
            {
                this.IsBusy = false;
            }
        }

@katit I在开发Silverlight OOB应用程序时也遇到了这个问题。。我的应用在Windows上运行得很好,但在Mac上它被冻结了,我不得不强制退出以再次使用它

我实际上是在从服务器读取PDF(存储在字段类型-‘varbinary’)并将其存储到用户的本地机器上

我的解决方案是分部分下载文件块(我使用的缓冲区大小为-1MB)

不确定应用程序冻结时使用的文件大小。。但我认为,将“PDFData”以小部分的形式写入filestream可能会对您有所帮助

另外,添加filestream.Flush();(请参阅下面代码中突出显示的部分)并查看这是否有帮助:

private void SavePDFFile()
    {
        var saveFileDialog = new SaveFileDialog
                                 {
                                     DefaultExt = "pdf",
                                     Filter = string.Format("Document(.{0})|*.{0}", "pdf"),
                                     FilterIndex = 1,
                                     DefaultFileName = DateTime.Now.ToString("HHmmMMddyyyy")
                                 };

        var saveClicked = saveFileDialog.ShowDialog();
        if (!saveClicked.HasValue || !saveClicked.Value) return;
        var fileStream = saveFileDialog.OpenFile();

        try
        {
            this.IsBusy = true;
            fileStream.Write(this.PDFData, 0, this.PDFData.Length);
            **filestream.Flush();**
            fileStream.Close();
        }
        catch (Exception ex)
        {
            this.DisplayErrorMessage("Error saving PDF file", ex);
        }
        finally
        {
            this.IsBusy = false;
        }
    }

回答我自己的问题。这与代码本身无关。这是安全问题。为了允许这段代码在Mac上执行(看起来IE的新版本也是如此),您需要给它更多的权限

在IE上,您需要将网站添加到受信任的网站列表中


在Mac上-您需要将Silverlight设置为在“不安全”模式下运行。这在Preferences/Security/Silverlight中,需要选择网站,按住“Option”键,然后打开下拉菜单查看该选项。花了一段时间才找到答案。

你能回顾一下我的答案并让我知道它是否有用吗。不,这不是我的问题所在。好的。。谢谢你的回答。我想如果是因为文件太大。