Timer & Update Panel

giovedì 30 agosto 2007 - 10.40

Anonimo Profilo | Senior Member

Salve,
mi sono registrato perchè (come ogni nuovo utente) ho un problemino da risolvere, ovvero:

ho bisogno di costruire una paginetta web che mi permetta di visualizzare una immagine e aggiornare la stessa ogni secondo (per aggiornamento non intendo assolutamente il refresh della pagine). Mi spiego meglio.

L'url contenente l'immagine è sempre lo stesso e si trova in rete (ma l'immagine cambia, per farvi un'idea penasate ad una webcam in rete, il mio obbiettivo è scattare una foto ogni secondo così da ottenere una sorta di "filmato").
Adesso ho bisogno di fare in modo che ogni secondo l'oggetto Image "aggiorni" l'immagine.

Ho provato con l'estensione Ajax, utilizzando il timer e l'update panel :

lato progettazione:

<%@ Page Language="VB" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>view</title>
</head>
<body>
<form id="frm1" runat="server">
<asp:ScriptManager id="ScriptManager1" runat="server" />
<div>
<asp:Timer id="TimerTlc" runat="server" OnTick="Tick" Enabled="True" Interval="1000" />
<asp:UpdatePanel id="UpdateVideo" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Image ID="Image" runat="server" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="TimerTlc" EventName="Tick" />
</Triggers>
</asp:UpdatePanel>
</div>
</form>
</body>
</html>

lato codice:

Protected Sub Tick(ByVal sender As Object, ByVal e As System.EventArgs)
Me.ImageTlc.ImageUrl = "http://....jpg"
End Sub

Ma utilizzando il codice sopra riportato mi viene fuori solo la prima immagine, mentre se utilizzo il timer in maniera sincrona, quindi, modificando il codice "lato progettazione" in questo modo:

<%@ Page Language="VB" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>view</title>
</head>
<body>
<form id="frm1" runat="server">
<asp:ScriptManager id="ScriptManager1" runat="server" />
<div>
<asp:Timer id="TimerTlc" runat="server" OnTick="Tick" Enabled="True" Interval="1000" />
<asp:UpdatePanel id="UpdateVideo" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Image ID="Image" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
</body>
</html>

Mi restituisce l'immagine ad ogni secondo ma risulta sgradevole da vedere per lo sfarfallio dell'operazione di aggiornamento.

Gradirei gentilmente un aiuto, un osservazione sul codice, magari su errori effettuati, oppure su altre strade possibili da effettuare nel caso questa soluzione non sia proprio quella ottimale (anche aggiungendo script o altro).

ringrazio per l'attenzione, SERGIO.

freeteo Profilo | Guru

ciao,
probabilmente hai gia' risolto, cmq sia ho visto adesso il post e quindi provo a risponderti lo stesso.
Analizzando quanto vuoi fare tu, mi sembra strano che non funzioni, ti posto una pagina di esempio che ho creato ankio e funziona perfettamente:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

mi viene da chiederti, potrebbe essere un problema perche' l'immagine si chiama sempre con lo stesso nome (e magari fa cache) ?
Che versione di ajax hai usato?
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

Anonimo Profilo | Senior Member

Prima di tutto grazie per l'attenzione mostrata al problema. Grazie tanto.
Comunque hasi centrato a pieno il problema, l'immagine ha sempre lo stesso nome.
Effettivamente la tua soluzione funziona, (ma non nel mio caso), mi accennavi ad un discorso cache, cosa mi consigli di gestire la cosa direttamente dalla cache o altro, Io ho solo paura di appesantire l'applicazione.
Ti ringrazio ancora tanto sergio6715.

freeteo Profilo | Guru

ciao,
sinceramente non ho una soluzione al problema da proporti, solamente ti segnalavo che avendo un'immagine con lo stesso nome allora potrebbe essere il tuo browser che si tiene in cache l'immagine.
Potresti provare a mettere un'attributo come "meta" tag nella pagina per dirgli di non fare cache della pagina, qualcosa come:
<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">

per maggiori dettagli puoi partire a guardare da qui:
http://www.w3schools.com/tags/tag_meta.asp

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5