Ho visto un certo numero di esempi che mostrano il CycleTile in azione, ma tutti hanno usato immagini locali. È possibile impostare queste immagini una volta che l'app è stata eseguita per la prima volta e indirizzare CycleTile alle immagini remote? O se ho bisogno di salvarli prima sul telefono, come posso far riferimento a CycleTile?Creazione di CycleTile con immagini remote
risposta
CycleTileTemplate & CycleTileData supportano solo URI locali e non supportano URI web remoti.. Ciò significa che puoi impostare la sorgente di un'immagine del ciclo solo da file installati da XAP o da file in IsoStore.
Per supportare immagini remote in CycleTileData, è necessario scaricare le immagini in un agente di background periodico, salvarle in IsoStore e quindi aggiornare CycleTileData con tali immagini. Le notifiche push non funzioneranno qui poiché le immagini devono essere locali e neanche ShellTileSchedule.
Assicurarsi di salvare le immagini su IsoStore sotto "/ Shared/ShellContent" e impostare gli URI come "isostore: /Shared/Shellcontent/myImage.png" o non saranno accessibili ai riquadri della schermata iniziale.
Vediamo un esempio. Prima iniziamo scrivendo su un algoritmo filettato parallelizzato che lancia 9 discussioni scaricare, attende i risultati e aggiorna piastrelle:
private IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication();
private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
var threadFinishEvents = new List<WaitHandle>();
DownloadImages(threadFinishEvents);
new Thread(()=>
{
Mutex.WaitAll(threadFinishEvents.ToArray());
UpdateTiles();
isoStore.Dispose();
}).Start();
}
Avanti, faremo scaricare le immagini in 9 IsoStore "/ Shared/ShellContent". Prenderemo nota speciale per aggiungere i nuovi flag di threading per ogni download Web e impostare il flag come fatto una volta che il file si trova in IsoStore.
private void DownloadImages(List<WaitHandle> threadFinishEvents)
{
for (int i = 0; i < 9; i++)
{
var localI = i;
var threadFinish = new EventWaitHandle(false, EventResetMode.ManualReset);
threadFinishEvents.Add(threadFinish);
var request = WebRequest.CreateHttp("http://www.justinangel.net/storage/691x336.png");
request.BeginGetResponse(ir =>
{
var result = request.EndGetResponse(ir);
using (var isoStoreFile = isoStore.OpenFile("shared/shellcontent/myImage" + localI + ".png",
FileMode.Create,
FileAccess.ReadWrite))
using (var response = result.GetResponseStream())
{
var dataBuffer = new byte[1024];
while (response.Read(dataBuffer, 0, dataBuffer.Length) > 0)
{
isoStoreFile.Write(dataBuffer, 0, dataBuffer.Length);
}
}
threadFinish.Set();
}, null);
}
}
Infine, aggiorneremo il riquadro live per utilizzare le nuove immagini in IsoStore.
private void UpdateTiles()
{
ShellTile.ActiveTiles
.First()
.Update(new CycleTileData()
{
Title = "Cyclical",
CycleImages = new Uri[]
{
new Uri("isostore:/Shared/ShellContent/myImage0.png", UriKind.Absolute),
new Uri("isostore:/Shared/ShellContent/myImage1.png", UriKind.Absolute),
new Uri("isostore:/Shared/ShellContent/myImage2.png", UriKind.Absolute),
new Uri("isostore:/Shared/ShellContent/myImage3.png", UriKind.Absolute),
new Uri("isostore:/Shared/ShellContent/myImage4.png", UriKind.Absolute),
new Uri("isostore:/Shared/ShellContent/myImage5.png", UriKind.Absolute),
new Uri("isostore:/Shared/ShellContent/myImage6.png", UriKind.Absolute),
new Uri("isostore:/Shared/ShellContent/myImage7.png", UriKind.Absolute),
new Uri("isostore:/Shared/ShellContent/myImage8.png", UriKind.Absolute),
}
});
}
Ci sono un paio di cose interessanti da considerare:
- periodiche agenti in background hanno solo 25 secondi per completare il loro funzionamento, quindi potrebbe avere senso per aggiungere timer thresehold quando si attiva Mutex.WaitAll e hanno fallisce con grazia.
- Il download di 9 immagini in 25 secondi potrebbe non funzionare affatto in alcune condizioni di rete, quindi potrebbe essere meglio ottimizzarlo. Puoi utilizzare meno immagini o aggiornare solo poche immagini ogni 30 minuti.
- Aggiornamento di CycleTileData sullo stesso file Gli URI non attivano un aggiornamento del riquadro (AFAIK). Quindi avrai bisogno di nomi di file migliori di myImage0, ma preferisci avere nomi di file univoci per le immagini.
Per CycleTile, le immagini devono essere locali. È possibile impostare un periodic task per aggiornare le immagini, quindi archiviare tali immagini nella cartella speciale condivisa/shellcontent nella memoria locale/isolata (ad esempio, ms-appdata: ///local/shared/shellcontent/image01.png)
Session 7 of the Windows Phone 8 Jumpstart è un buon riferimento per questo - specificamente circa 25:30 in
- 1. Creazione Gridview con immagini cliccabili, Android
- 2. Creazione di immagini reattive con proporzioni diverse della stessa altezza
- 3. SDWebImage non carica immagini remote fino a scorrere
- 4. Creazione di immagini GIF animate utilizzando R
- 5. Creazione video da serie di immagini?
- 6. Creazione di server Drb remoto (da utilizzare con il pry-remote)
- 7. git cherry-pick commitless sul remote remote
- 8. di gestione di IIS Remote
- 9. Push to Remote URL con TortoiseGit
- 10. Rails remote conflitti con modal remoto bootstrap
- 11. Ciao mondo! con Remote Session Session Bean
- 12. creazione di video dalla sequenza di immagini javacv
- 13. Creazione di gif animate da una serie di immagini jpeg
- 14. C# Creazione di video MP4 da immagini e file mp3
- 15. Creazione di percorsi e immagini trascinabili in Raphael js
- 16. Creazione di immagini molto grandi utilizzando Python Image Library
- 17. data-remote true che definisce una richiamata
- 18. Creazione di immagini dinamiche/intestazioni Apache utilizzando Imagick
- 19. Creazione di webview con programmazione in Swift
- 20. Prova a impostare messaggio di convalida personalizzato con jQuery Remote
- 21. Creazione di una tabella dinamica con PHP
- 22. Creazione di un editor di immagini con HTML 5 e Canvas
- 23. Creazione di pulsanti di opzione RadioGroup con immagini in Android ... Come?
- 24. lento ffmpeg's immagini al secondo durante la creazione di video da immagini
- 25. Notifiche Remote View Android
- 26. Filiali remote rosse Git
- 27. EventLogReader Remote Performance
- 28. Connessioni remote Mysql Ubuntu
- 29. JBoss JMS Remote Queue?
- 30. Download di immagini con scrapy
Suggerisco di utilizzare i trasferimenti di file in background per i download, molto affidabili e non si vincola al limite di 25 secondi. –
+1 su raccomandazione matthijs. Buona chiamata – JustinAngel