J'ai cette classe:mise à jour Silverlight fil croix question
public class UploadFile : INotifyPropertyChanged {
private string name;
public string Name {
get {
return name;
}
set {
name = value;
OnPropertyChanged("Name");
}
}
private FileInfo fileInfo;
public FileInfo FileInfo { get; set; }
private string length;
public string Length {
get {
return length;
}
set {
length = value;
OnPropertyChanged("Length");
}
}
private int percentage;
public int Percentage {
get {
return percentage;
}
set {
percentage = value;
OnPropertyChanged("Percentage");
}
}
public string ProgressValue {
get { return string.Format("{0}%", Percentage); }
}
private string imageSource;
public string ImageSource {
get {
return imageSource;
}
set {
imageSource = value;
OnPropertyChanged("ImageSource");
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
#endregion
private void OnPropertyChanged(string property) {
if (PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
}
Je suis en train de créer un transfert de fichier qui est capable de le téléchargement de fichiers volumineux et multiples. Je fais cela en utilisant un service web. J'ai fait une liaison bidirectionnelle dans mon interface utilisateur et maintenant je veux télécharger les fichiers. Je le fais en utilisant ce code
private void DoUpload() {
foreach (UploadFile file in fileInfos){
int BUFFERSIZE = 1024;
int offset = 0; //get from webservice, when partial file
FileStream s = file.FileInfo.OpenRead();
byte[] buffer = null;
long remainingBytes = s.Length - offset;
while (remainingBytes > 0) {
if (remainingBytes < BUFFERSIZE) {
buffer = new byte[remainingBytes];
BUFFERSIZE = (int)remainingBytes;
}
else if (remainingBytes > BUFFERSIZE) {
buffer = new byte[BUFFERSIZE];
}
s.Read(buffer, 0, BUFFERSIZE);
//push to webservice
Thread.Sleep(20);
//UploadService.Service1SoapClient client = new MultiLargeFileUpload.UploadService.Service1SoapClient();
//client.LargeUploadCompleted +=new EventHandler<AsyncCompletedEventArgs>(client_LargeUploadCompleted);
//client.LargeUploadAsync(1, buffer, file.Name);
offset += BUFFERSIZE;
int newPercentage = offset/(int)file.FileInfo.Length * 100;
file.Percentage = newPercentage;
remainingBytes = s.Length - offset;
}
//file.Percentage = 100;
//file.ImageSource = "accept.png";
}
}
Le problème est que je ne peux pas mettre à jour l'interface utilisateur, ou le fonctionnement croisé. J'ai essayé d'utiliser un Dispatcher, mais je n'ai pas réussi parce que je ne savais pas où l'insérer.