C# 无法在Silverlight中下载.pdf文件

C# 无法在Silverlight中下载.pdf文件,c#,silverlight,encoding,webclient-download,C#,Silverlight,Encoding,Webclient Download,我对Silverlight相当陌生。我正在尝试用Silverlight下载一个.pdf文件(以及其他几种格式)。用户单击一个按钮,系统将获取URI,然后显示一个SaveFileDialog以获取保存文件的位置。以下是一段代码片段: WebClient wc = new WebClient(); wc.DownloadStringCompleted += (s, e3) => { if (e3.Error == null) { try {

我对Silverlight相当陌生。我正在尝试用Silverlight下载一个.pdf文件(以及其他几种格式)。用户单击一个按钮,系统将获取URI,然后显示一个SaveFileDialog以获取保存文件的位置。以下是一段代码片段:

WebClient wc = new WebClient();
wc.DownloadStringCompleted += (s, e3) =>
{
    if (e3.Error == null)
    {
        try
        {
            byte[] fileBytes = Encoding.UTF8.GetBytes(e3.Result);
            using (Stream fs = (Stream)mySaveFileDialog.OpenFile())
            {
                fs.Write(fileBytes, 0, fileBytes.Length);
                fs.Close();

                MessageBox.Show("File successfully saved!");
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error getting result: " + ex.Message);
        }
    }
    else
    {
        MessageBox.Show(e3.Error.Message);
};

wc.DownloadStringAsync("myURI", UriKind.RelativeOrAbsolute));
文件可以保存,但它大约是原始文件的两倍大,无法读取。结果看起来大小合适(5Mb),但我怀疑它包含很多无关字符。文件字节似乎太大了两倍(11Mb)。我想尝试DownloadDataAsync而不是DownloadStringAsync(希望它能解决任何编码问题),但Silverlight的System.Net.WebClient版本非常精简,不支持DownloadDataAsync(它不会编译)


我相当肯定这是一个编码问题,但我不知道如何解决它

PDF文件是二进制文件,不使用UTF8编码。要使用Silverlight下载PDF文件,您需要使用
WebClient
类的方法开始下载文件的二进制数据,而不是像您看起来那样的方法


您应该处理事件并将接收到的字节写入本地PDF文件的流,而不是处理事件。如果将设置为
true
OpenReadCompleted
事件仅在下载整个文件时才会触发,提供与
DownloadStringCompleted
相同的行为。但是,整个PDF文件将被缓冲在内存中,如果文件非常大,这可能是个坏主意。

为什么要使用编码?我认为pdf文件是二进制文件,不应进行编码,您是否尝试使用DownloadDataCompleted(或使用编码写入字符串?)DownloadDataCompleted在System.Net.WebClient的Silverlight版本中不可用。我试着只写字符串,但得到了几乎相同的结果。这就解决了@Martin。它返回一个流,所以我只需要使用(stream fs=(stream)dialog.OpenFile(){e3.Result.CopyTo(fs);fs.Flush();fs.Close();MessageBox.Show(“文件成功保存!”);}