2011-11-21 10 views
6

Tengo este problema cuando uso la transferencia de archivos en segundo plano en WP7. Funciona perfectamente cuando mi aplicación se está ejecutando, pero tan pronto como hago clic en el botón de Windows, se detiene (y se reanuda cuando activo de nuevo la aplicación.) El Fondo de Transferencia de Archivos no se ejecuta en segundo plano, incluso cuando la aplicación está desactivada? ¿Tiene que ser en una clase separada (algún tipo de clase de agente de fondo, separada del proyecto principal?) Realmente frustrante, cuando estoy haciendo todo lo que el tutorial aquí dice: http://msdn.microsoft.com/en-us/library/hh202959(v=vs.92).aspx.Problemas de transferencia de archivos de fondo

¿Hay algunas cosas "especiales" que debo hacer para asegurarme de que se ejecutan en segundo plano, o algunos métodos, tal vez los que creé yo mismo (para obtener la url, etc.), que no se pueden acceder mientras desactivado? ¿No puedo agregar a la cola mientras estoy desactivado, tal vez?

Gracias mucho por su tiempo :)

EDIT: Un poco de depuración me dice que el archivo de la cola es en realidad la descarga. Se termina, pero no alcanza el siguiente hasta que reactive la aplicación. ¿Puedo no usar mis propios métodos, variables, etc. al hacer esto? Tal vez tengo una cola interna para, digamos, 20 elementos. ¿Cómo puedo llenar la cola de descarga (max 5) cuando esto llega a cero?

Edit2: En la muestra de Microsoft, dicen que se puede añadir a la cola en un momento posterior:

// Check to see if the maximum number of requests per app has been exceeded. 
if (BackgroundTransferService.Requests.Count() >= 5) 
{ 
// Note: Instead of showing a message to the user, you could store the 
// requested file URI in isolated storage and add it to the queue later. 
MessageBox.Show("The maximum number of background file transfer requests for this application has been exceeded. "); 
return; 
} 

Pero no dice si podemos hacer esto mientras en segundo plano o no. Dado que se trata de la transferencia de archivos en segundo plano, deberían haberlo mencionado, de lo contrario, debemos asumir que se puede hacer en segundo plano, lo que no parece ser el caso. Pero no podemos saber eso. ¿Alguien que puede confirmar esto al 100%?

Respuesta

3

He investigado esto también y no es posible (basado en mi investigación) rellenar la cola después del máximo. 5 descargas en cola han terminado. Pensé en utilizar un agente de fondo, pero BackgroundTransferRequest.Add no está disponible desde los agentes de segundo plano, lo que significa que la única manera de poner en cola más descargas es cuando tu aplicación se está ejecutando (ver Unsupported APIs for Background Agents for Windows Phone).

Lo único que se me ocurre es utilizar un agente de fondo para enviar una notificación de brindis para informar al usuario que las descargas han finalizado y que deben iniciar la aplicación para poner en cola las siguientes cinco descargas. Esto es menos que ideal.

+0

Gracias por la respuesta. Eso es básicamente lo que descubrí también, y eso no es suficiente en absoluto. Supongo que debe haber otra forma de hacerlo, ¿alguien más miró a esto y tal vez encontró una solución? – kgrevehagen

Cuestiones relacionadas