Principales respuestas
Mi primera aplicación, problemas con scrollviewer

Pregunta
-
Hola, estoy programando mi primera aplicación para windows phone y quería comentar un problema que estoy teniendo a ver si alguien me puede ayudar. Tengo una imagen, un scrollviewer y un botón, la imagen la tengo dividida en frames(toda una fila horizontal de 100x100 cada frame) de tal manera que el scrollviewer solo muestra un frame, la idea es que si pulso el botón se genera un número aleatorio que decide que frame se va a mostrar:
private void button1_Click(object sender, RoutedEventArgs e)
{
scrollViewer1.ScrollToHorizontalOffset(random.Next(6) * 100);
}Este código no me da ningún problema, lo que pasa es que mi intención ahora es generar como si fuera el efecto de una ruleta, es decir si pulso el botón se genera una sucesión de frames hasta que se detenga la "ruleta", mi idea era hacer esto:
private void button1_Click(object sender, RoutedEventArgs e)
{
for (int i = 0; i < 10; i++)
{
scrollViewer1.ScrollToHorizontalOffset(random.Next(6) * 100);
Thread.Sleep(500);
}
}Con este código lo único que consigo es hacer que tarde más, porque aunque se generen diez número aleatorios el scrollviewer no se actualiza hasta el final del bloque y por tanto solo muestra el último frame que ha salido. Alguien sabe qué puedo hacer para conseguir este efecto de esta manera o simplemente no se puede?
Gracias de antemano.
Respuestas
-
Hola,
Prueba hacerlo así..
private void button1_Click(object sender, RoutedEventArgs e)
{
ThreadPool.QueueUserWorkItem (Go);
}private void Go()
{
for (int i = 0; i < 10; i++)
{
var rnd = random.Next(6) * 100;
Dispatcher.BeginInvoke(()=> { scrollViewer1.ScrollToHorizontalOffset(rnd); });
Thread.Sleep(500);
}}Salu2
MCTS ADO.NET, MCTS WCF, MCTS WinForm, MCTS ASP.NET, MCPD Enterprise.
Mi perfil: My geeks
Colaborador: www.secondnug.com- Marcado como respuesta chals90 miércoles, 9 de mayo de 2012 11:08
Todas las respuestas
-
-
con ese código sigue haciendo lo mismo, lo único que ha cambiado es que ahora cuando pulso el botón no se queda deshabilitado hasta que termina el for, pero por lo demás sigue igual, solo muestra el último cálculo, ¿con este código lo qué se hace es que el bucle se ejecute en otro hilo?
Gracias.
-
Hola,
Prueba hacerlo así..
private void button1_Click(object sender, RoutedEventArgs e)
{
ThreadPool.QueueUserWorkItem (Go);
}private void Go()
{
for (int i = 0; i < 10; i++)
{
var rnd = random.Next(6) * 100;
Dispatcher.BeginInvoke(()=> { scrollViewer1.ScrollToHorizontalOffset(rnd); });
Thread.Sleep(500);
}}Salu2
MCTS ADO.NET, MCTS WCF, MCTS WinForm, MCTS ASP.NET, MCPD Enterprise.
Mi perfil: My geeks
Colaborador: www.secondnug.com- Marcado como respuesta chals90 miércoles, 9 de mayo de 2012 11:08
-
si señor así si que funciona, lo único que he tenido que cambiar es que he tenido que declarar un object como parametro de entrada de la función go, pero bueno en el artículo que me había pasado jose miguel ya lo había visto así que no me ha llevado tiempo arreglar ese error. Muchísimas gracias a los dos.