Große Dateien im Hintergrund herunterladen
Heute möchte ich euch einen kurzen Code-Snippet an die Hand geben mit dem ihr eine große Datei aus dem Web herunterladen könnt. Der Vorteil dabei ist, dass der Download auch fortgesetzt wird, auch wenn die App in den Hintergrund gesetzt wird. Um dieses Snippet herum, baue ich noch eine Mini-Anwendung, damit ihr es direkt einmal ausprobieren könnt. Beginnen wir mit dem Starten von Visual Studio.
Öffnet nun die MainPage.xaml-Datei und fügt in das noch leere Grid den folgenden Code ein, um eine einfache GUI für die App zu erstellen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<StackPanel Margin="120,10" VerticalAlignment="Center" HorizontalAlignment="Center"> <Grid Width="500" Height="150"> <Grid.RowDefinitions> <RowDefinition Height="3*"/> <RowDefinition Height="3*"/> <RowDefinition Height="3*"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="2*"/> <ColumnDefinition Width="8*"/> </Grid.ColumnDefinitions> <TextBlock Text="Adresse:" Grid.Row="0" Grid.Column="0" VerticalAlignment="Center"/> <TextBox x:Name="serverAddressField" Grid.Row="0" Grid.Column="1" VerticalAlignment="Center"/> <TextBlock Text="Dateiname:" Grid.Row="1" Grid.Column="0" VerticalAlignment="Center"/> <TextBox x:Name="localFileName" Grid.Row="1" Grid.Column="1" VerticalAlignment="Center"/> <Button x:Name="DownlaodBtn" Content="Download" Grid.Row="2" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Right"/> </Grid> </StackPanel> |
Öffnet nun die Package.appxmanifest-Datei und wählt unter Capabilities sowohl Internet (Client) als auch Videos Library aus.
Wechselt dann in die MainPage.xaml.cs-Datei und ergänzt die folgenden 3 using-Anweisungen, um Zugriff auf Dateien und den Hintergrund-Download zu kommen.
1 2 3 |
using System.Threading.Tasks; using Windows.Networking.BackgroundTransfer; using Windows.Storage; |
Nun erstellen wir noch die eigentliche Download-Methode, welche die übergebene Url entgegen nimmt und dann den Download startet und durchführt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
private async void DownlaodBtn_Click(object sender, RoutedEventArgs e) { Uri source; Uri.TryCreate(serverAddressField.Text.Trim(), UriKind.Absolute, out source); string destination = localFileName.Text.Trim(); StorageFile destinationFile; destinationFile = await KnownFolders.VideosLibrary.CreateFileAsync(destination, CreationCollisionOption.ReplaceExisting); BackgroundDownloader downloader = new BackgroundDownloader(); DownloadOperation download = downloader.CreateDownload(source, destinationFile); await download.StartAsync(); } |
Nun kann jede beliebige Video-Datei einfach im Hintergrund heruntergeladen werden, auch wenn ihr die App verlasst und in den Hintergrund schiebt.