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

时间:2016-11-29 21:31:59

标签: macos silverlight freeze

非常简单的代码,用于启动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;
            }
        }

2 个答案:

答案 0 :(得分:1)

回答我自己的问题。这与代码本身无关。这是安全问题。为了允许此代码在Mac上执行(并且它似乎也是IE的新版本),您需要为其提供更多权限。

在IE上,您需要将网站添加到可信站点列表中。

在Mac上 - 您需要将Silverlight设置为"不安全"模式。这是在首选项/安全/ Silverlight中,需要选择网站,按住"选项"键然后打开下拉列表以查看该选项。花了一段时间才找到它..

答案 1 :(得分:0)

@katit我在使用Silverlight OOB应用程序时也遇到了这个问题..我的应用程序在Windows中工作正常,但在Mac中它被冻结了,我必须强制退出再次使用它。

我实际上正在从服务器读取PDF(存储在字段类型 - 'varbinary'中)并将其存储到用户的本地计算机。

对我来说,解决方案是部分下载文件块(我使用缓冲区大小 - 1 MB)。

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

另外,添加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;
        }
    }