Benutzer mit den meisten Antworten
WP: Background Tasks

Frage
-
Hallo,
ich möchte bei einer Windows Phone Anwendung ein Background Task einrichten, um in einem festen Abstand aus dem Internet etwas runterzuladen und zu verarbeiten. So wie ich das verstanden habe, muss man das mit PeriodicTask lösen. Leider schaffe ich das einfach nicht, das richtig einzurichten. Bei dem PeriodicTask kann ich aber keine Wiederholung angeben. (Ich verstehe sowieso nicht, wo ich die "verzögerung" angeben kann) Gibt es Vielleicht eine andere Möglichkeit das zu lösen? Und wenn ja, wie macht man das? Die Msdn-Anleitung hat mir leider nicht geholfen.
Gibt es vielleicht eine andere Lösung?
Wenn nicht habe ich noch eine Frage zu dem Beispiel von Msdn: Der Task, der dann im Hintergrund ausgeführt wird, ist ja in einem extra Projekt. In dem Code vom Hauptprojekt wird doch aber gar nicht auf das Nebenprojekt verwiesen. Wie funktioiert das ganze dann?
Viele Grüße,
Alex
- Bearbeitet Ahn1 Donnerstag, 2. Februar 2012 00:27
- Verschoben Robert Breitenhofer Donnerstag, 2. Februar 2012 08:26 Windows Phone (aus:Silverlight)
Antworten
-
Ah - ich verstehe. Für genau diesen Fall gibt es doch Push Notifications. Schau dir diese doch mal an.
This posting is provided "AS IS" with no warranties, and confers no rights.- Bearbeitet PeterNowak Freitag, 3. Februar 2012 18:38
- Als Antwort markiert Ahn1 Montag, 6. Februar 2012 20:28
Alle Antworten
-
Hallo Alex,
>>In dem Code vom Hauptprojekt wird doch aber gar nicht auf das Nebenprojekt verwiesen.
Dies passiert in Punkt 3 der Anleitung.
Du solltest Dir vielleicht mal das folgende HOL anschauen. Die Beschreibung der Vorgehensweise ist etwas ausführlicher:
http://msdn.microsoft.com/en-us/WindowsPhoneTrainingCourse_TodoMultitasking
Schöne Grüße
Oliver
-
Danke für den Link.
Ich habe jetzt noch ein Problem:
Hier erstmal mein Code:
PeriodicTask periodicTask = null; const string c_TaskName = "ReloadSchedulerTask"; periodicTask = new PeriodicTask(c_TaskName); periodicTask.Description = "bla bla bla bl"; periodicTask.ExpirationTime = DateTime.Now.AddSeconds(15); if (ScheduledActionService.Find(c_TaskName) != null) ScheduledActionService.Remove(c_TaskName); ScheduledActionService.Add(periodicTask); ScheduledActionService.LaunchForTest(c_TaskName, new TimeSpan(0, 0, 3));
<Tasks> <DefaultTask Name="_default" /> <!--NavigationPage="MainPage.xaml"--> <ExtendedTask Name="BackgroundTask"> <BackgroundServiceAgent Specifier="ScheduledTaskAgent" Name="ReloadAgent" Source="ReloadAgent" Type="ReloadAgent.ScheduledAgent" /> </ExtendedTask> </Tasks>
namespace ReloadAgent { public class ScheduledAgent : ScheduledTaskAgent { private static volatile bool _classInitialized; /// <remarks> /// ScheduledAgent-Konstruktor, initialisiert den UnhandledException-Handler /// </remarks> public ScheduledAgent() { if (!_classInitialized) { _classInitialized = true; // Handler für verwaltete Ausnahmen abonnieren Deployment.Current.Dispatcher.BeginInvoke(delegate { Application.Current.UnhandledException += ScheduledAgent_UnhandledException; }); } } /// Code, der bei nicht behandelten Ausnahmen ausgeführt wird private void ScheduledAgent_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) { if (System.Diagnostics.Debugger.IsAttached) { // Eine nicht behandelte Ausnahme ist aufgetreten. Unterbrechen und Debugger öffnen System.Diagnostics.Debugger.Break(); } } /// <summary> /// Agent zum Ausführen einer geplanten Aufgabe /// </summary> /// <param name="task"> /// Die aufgerufene Aufgabe /// </param> /// <remarks> /// Diese Methode wird aufgerufen, wenn eine regelmäßige oder ressourcenintensive Aufgabe aufgerufen wird /// </remarks> protected override void OnInvoke(ScheduledTask task) { //TODO: Code zum Ausführen der Aufgabe im Hintergrund hinzufügen MessageBox.Show("test"); NotifyComplete(); } } }
Das Problem ist, dass der Agent nich aufgerufen wird. Weiß jemand wieso?
- Bearbeitet Ahn1 Donnerstag, 2. Februar 2012 10:55
-
Der wird auch nie ausgeführt werden, wenn das ausführen der Assembly nicht erlaubt ist. Nimm mal die Referenz auf die zugehörige Bibliothek und das Codefragment raus und schaue dann nochmal...
This posting is provided "AS IS" with no warranties, and confers no rights. -
Hi,
leider nein. Es gibt nur den PeriodicTask (alle 30 Minuten) oder den ResourceIntensivTask (auslösen bei einem Ereignis). Häufiger ist einfach nicht möglich um den Akku zu schonen. Was willst du damit erreichen? Was ist dein Anwendungsfall?
Gruß, Peter
This posting is provided "AS IS" with no warranties, and confers no rights. -
Ich bin auf einem Oberstufenzentrum und programmiere eine App, um den aktuellen Stundenplan abzurufen. Wenn sich etwas an dem Stundenplan ändert, soll der Benutzer automatisch benachichtigt werden. Da sich der Stundenplan aber sehr kurzfristig ändern kann, reichen 30 minuten nicht.
-
Ah - ich verstehe. Für genau diesen Fall gibt es doch Push Notifications. Schau dir diese doch mal an.
This posting is provided "AS IS" with no warranties, and confers no rights.- Bearbeitet PeterNowak Freitag, 3. Februar 2012 18:38
- Als Antwort markiert Ahn1 Montag, 6. Februar 2012 20:28