silverlight 5中不支持UploadFileAsync(您是否缺少程序集引用)

时间:2014-03-28 13:21:47

标签: c# silverlight web-applications webclient silverlight-5.0

我正在使用Silverlight-5VS-2010 ExpressSP-1,我是C#beginner并尝试在浏览按钮上单击上传文件。我的GUI就像这个http://prntscr.com/34tevq但是当我尝试在我的代码中写这行时

client.UploadFileAsync(filename, fileChunks[index]);(其中WebClient client = new WebClient();)然后它会在UploadFileAsync下面显示红线,错误是:

'System.Net.WebClient' does not contain a definition for 'UploadFileAsync' and no extension method 'UploadFileAsync' accepting a first argument of type 'System.Net.WebClient' could be found (are you missing a using directive or an assembly reference?) 

我的c#代码是:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.IO;

namespace shekhar_Final
{
    public partial class MainPage : UserControl
    {
        List<byte[]> fileChunks;
        int chunkSize, index;
        string filename;
        double filesize, senddata;



        public MainPage()
        {
            InitializeComponent();
            chunkSize = 4096;
            filesize = 0;
            index = 0;
            senddata = 0;
            filename=null ;
            fileChunks=null;


        }


        public void browse_button_click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();

            if ((bool)ofd.ShowDialog())
            {
                filename = ofd.File.Name;
                FileStream fs = ofd.File.OpenRead();
                filesize = (double)fs.Length;
                textBox1.Text = filename;
                index = 0;
                senddata = 0;

                byte[] file = new byte[fs.Length];
                fs.Read(file, 0, file.Length);
                ConvertToChunks(file);
                prgUpload.Maximum = fileChunks.Count;
                prgUpload.Value = 0;
                uploadChunks(index);
            }
        }
        private void ConvertToChunks(byte[] imagefile)
        {
            double totalChunks = Math.Ceiling((double)imagefile.Length / (double)chunkSize);
            fileChunks = new List<byte[]>();
            for (int i = 0; i < totalChunks; i++)
            {
                byte[] chunks;
                int startIndex = i * chunkSize;
                if (startIndex + chunkSize > imagefile.Length)
                    chunks = new byte[imagefile.Length - startIndex];
                else
                    chunks = new byte[chunkSize];
                Array.Copy(imagefile,startIndex,chunks,0,chunks.Length);
                fileChunks.Add(chunks);
            }          
        }

        private void uploadChunks(int index)
        {

            WebClient client = new WebClient();
            client.UploadFileAsync(filename, fileChunks[index]);
           //this UploadFileAsync is not even in sky blue color in my VS code.
        }

        private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
        {
            //to be done
        }
    }
}

我缺少装配参考吗?如是 ?那呢?非常感谢,谢谢。

1 个答案:

答案 0 :(得分:1)

Silverlight的WebClient doesn't have一种名为UploadFileAsync的方法。但是,桌面运行时会这样做。

您应该在WebClient上使用OpenWriteAsync,然后处理OpenWriteCompleted事件处理程序并写入Stream。

或者,您可以找到WebClient的替代解决方案,例如使用较低级别的HttpWebRequest类或第三方库。