Benutzer mit den meisten Antworten
DownloadAsync

Frage
-
Hallo! Ich versuche mehrere Bilder per RIA "herunterzuladen" und in einen ImageSlider (per Grid.Children.Add(image)) einzufügen. Ich bekomme aber immer nur ein Bild angezeigt, obwohl wirklich mehrere Bilder heruntergeladen werden. Baue ich aber in der Methode abc() nach jedem Download(picname) ThreadSleep(10000) (was ausreicht um jedes Bild vollständig nacheinender herunterzuladen) ein, so erscheinen alle Bilder in dem Grid. Muss ich irgendwie für Synchronisierung sorgen? Vielen Dank für die Antwort!
public void abc() { foreach (string picname in list) this.Download(picname ); } private void Download(string picture) { PictureServiceClient client = new PictureServiceClient(); client.DownloadCompleted += new System.EventHandler<PictureService.DownloadCompletedEventArgs>(client_DownloadCompleted); client.DownloadAsync(picture); } void client_DownloadCompleted(object sender, PictureService.DownloadCompletedEventArgs e) { if (e.Error == null && e.Result != null) { PictureFile pictureFile = new PictureFile(); pictureFile = e.Result; BitmapImage image = new BitmapImage(); image.SetSource(new MemoryStream(pictureFile.PictureStream)); ImageSlider.AddImage(image); } }
Antworten
-
Hallo D.,
- > wobei mir nicht klar ist, wie die Verbindung zwischen meinem Grid (namens IMageGrid) und dem Aufruf von Grid.SetColumn() ist. Grid.SetColumn ist doch statisch und hat keine Verbindung zu meinem Objekt ImageGrid....
Das sind "Angefügte Eigenschaften", bzw. als WPF-Begriff eine Sonderform von Abhängigkeitseigenschaften:
[Übersicht über angefügte Eigenschaften] (Attached Properties)
http://msdn.microsoft.com/de-de/library/ms749011.aspx[Gewusst wie: Registrieren einer angefügten Eigenschaft]
http://msdn.microsoft.com/de-de/library/ms753957.aspx
Jedes Grid hat (u.a.) eine angefügte statische DependencyProperty: ColumnProperty und RowProperty. Sie besitzen nicht den herkömmlichen Eigenschaftenwrapper. In der Grid-Klasse hast Du also in etwa folgende Implementation der Methode SetColumn:// in der der Klasse Grid implementiert: public static void SetColumn(UIElement element, Boolean value) { element.SetValue(Grid.ColumnProperty, value); }
Wenn das nicht reicht, kann man natürlich das noch weiter detaillieren.
ciao Frank- Als Antwort vorgeschlagen Robert BreitenhoferModerator Freitag, 28. Januar 2011 15:15
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 1. Februar 2011 07:54
-
Sorry, es lag an meiner Add-Methode des Sliders:
public void AddImage(BitmapImage bmpImage) { ImageGrid.ColumnDefinitions.Add(new ColumnDefinition()); Image image = new Image(); image.Source = bmpImage; image.SetValue(Grid.RowProperty, 0); image.SetValue(Grid.ColumnProperty, ImageGrid.ColumnDefinitions.Count-1); image.MouseLeftButtonUp += new MouseButtonEventHandler(image_MouseLeftButtonUp); ImageGrid.Children.Add(image); // Diese zwei Zeilen hatte ich nicht drin Grid.SetColumn(image, ImageGrid.ColumnDefinitions.Count - 1); Grid.SetRow(image, 0); }
Ich habe die zwei letzten Zeilen nicht drin, wobei mir nicht klar ist, wie die Verbindung zwischen meinem Grid (namens IMageGrid) und dem Aufruf von Grid.SetColumn() ist. Grid.SetColumn ist doch statisch und hat keine Verbindung zu meinem Objekt ImageGrid....
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Freitag, 28. Januar 2011 15:15
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 1. Februar 2011 07:54
Alle Antworten
-
Sorry, es lag an meiner Add-Methode des Sliders:
public void AddImage(BitmapImage bmpImage) { ImageGrid.ColumnDefinitions.Add(new ColumnDefinition()); Image image = new Image(); image.Source = bmpImage; image.SetValue(Grid.RowProperty, 0); image.SetValue(Grid.ColumnProperty, ImageGrid.ColumnDefinitions.Count-1); image.MouseLeftButtonUp += new MouseButtonEventHandler(image_MouseLeftButtonUp); ImageGrid.Children.Add(image); // Diese zwei Zeilen hatte ich nicht drin Grid.SetColumn(image, ImageGrid.ColumnDefinitions.Count - 1); Grid.SetRow(image, 0); }
Ich habe die zwei letzten Zeilen nicht drin, wobei mir nicht klar ist, wie die Verbindung zwischen meinem Grid (namens IMageGrid) und dem Aufruf von Grid.SetColumn() ist. Grid.SetColumn ist doch statisch und hat keine Verbindung zu meinem Objekt ImageGrid....
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Freitag, 28. Januar 2011 15:15
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 1. Februar 2011 07:54
-
Hallo D.,
- > wobei mir nicht klar ist, wie die Verbindung zwischen meinem Grid (namens IMageGrid) und dem Aufruf von Grid.SetColumn() ist. Grid.SetColumn ist doch statisch und hat keine Verbindung zu meinem Objekt ImageGrid....
Das sind "Angefügte Eigenschaften", bzw. als WPF-Begriff eine Sonderform von Abhängigkeitseigenschaften:
[Übersicht über angefügte Eigenschaften] (Attached Properties)
http://msdn.microsoft.com/de-de/library/ms749011.aspx[Gewusst wie: Registrieren einer angefügten Eigenschaft]
http://msdn.microsoft.com/de-de/library/ms753957.aspx
Jedes Grid hat (u.a.) eine angefügte statische DependencyProperty: ColumnProperty und RowProperty. Sie besitzen nicht den herkömmlichen Eigenschaftenwrapper. In der Grid-Klasse hast Du also in etwa folgende Implementation der Methode SetColumn:// in der der Klasse Grid implementiert: public static void SetColumn(UIElement element, Boolean value) { element.SetValue(Grid.ColumnProperty, value); }
Wenn das nicht reicht, kann man natürlich das noch weiter detaillieren.
ciao Frank- Als Antwort vorgeschlagen Robert BreitenhoferModerator Freitag, 28. Januar 2011 15:15
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 1. Februar 2011 07:54