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