Buenas a todos,
Resulta a que para una pràctica de la UIB he tenido que hacer un ascensor inteligente, y he decidio hacer los gráficos y la animación con WPF. Y para hacer la práctica he tenido que poner 1 thread (He cogido la idea de: http://msdn2.microsoft.com/es-es/library/7a2f3ay4(VS.80).aspx.) Para que vaya mirando que acciones tomar segun en que piso se este.
Para eso tengo dos clases.
Window1.cs Donde tengo el codebehind del Window.xaml, y aqui tengo:
En el evento Load del Window tengo lo siguiente
Worker workerObject = new Worker();
Thread workerThread = new Thread(workerObject.DoWork);
// Start the worker thread.
workerThread.Start();
// Loop until worker thread activates.
while (!workerThread.IsAlive) ;
Un procedimiento que es abrirpuerta que hace lo siguiente:
private void gespuerta(bool abrir)
{
if (abrir)
PuertasAbrir.Begin(this); // PuertasAbrir es un Objeto de tipo Storyboard donde tengo metido que se muevan los rectangulitos que hace el efecto de abrir la puerta
else
PuertasCerrar.Begin(this); //Idem anterior
}
Worker.cs
El Worker pues sigue el de la web donde el procedimiento DoWork() pues miro que acciones se han de tomar segun el piso que este.
MI PROBLEMA:
Desde el DoWork quiero llamar al procedimiento gespuerta(bool abrir) pero no puedo, ya que me da la excepcion de seguridad que "El subproceso que realiza la llamada no puede obtener acceso a este objeto porque el propietario es otro subproceso".
la forma en lo que lo he implementado ha sido con un delegado.
//DECLARACION - INICIO
public delegate void DelegaAnimacion(bool abrir);
DelegaAnimacion DA = new DelegaAnimacion(new Window1().gespuertas);
//DECLARACION - FIN
Cuando dentro del DoWork() pongo DA(true). pues salta la excepcion
Y no se como hacerlo........
He buscado por internet y he encontrado los siguiente links:
http://www.elguille.info/NET/vs2005/trucos/acceder_a_un_control_desde_otro_hilo.htm Y existe el problema del INVOKE que con WPF no existe.
http://www.elguille.info/colabora/NET2005/qrox_fswextendido.htm Aqui no emplea invoque emplea cosas de los threads de colas pero no se como aplicarlo a mi ejemplo
El problema de los threads lo encuentro complejo con el tema de los controles, pero lo aplica por seguridad....
Me podeis ayudar.???
Un saludo