none
¿Por qué no se ejecuta el método pasado al delegado del evento SystemState? RRS feed

  • Pregunta

  • Hola.

    Estoy haciendo un programa para dispositivos Pocket PC Phone Edition que ejecuten Windows Mobile 5/6. Lo que hace el programa es ejecutar una serie de acciones cuando el movil recibe una llamada. Para saber cuando se produce este evento, uso un objeto SystemState.

    El problema es que en este código el evento no se lanza:

    no funciona

    using System;
    using Microsoft.WindowsMobile.Status;
    using System.Threading;

    namespace MiPrograma
    {
        class Program
        {
            private static SystemState _incomingCallWatcher;

            static void Main(string[] args)
            {
                    _incomingCallWatcher = new SystemState(SystemProperty.PhoneIncomingCall);
                    _incomingCallWatcher.Changed += new ChangeEventHandler(_incomingCall_Changed);

                    while (true) {
                        Thread.Sleep(500);
                    }

            }

            private static void _incomingCall_Changed(object sender, ChangeEventArgs args)
            {
                ....
            }

    }


    Mientras que en este si se lanza y funciona bien. Pero yo no necesito un formulario para la aplicación.

    sí funciona

    using System;
    using Microsoft.WindowsMobile.Status;
    using System.Threading;

    using System.Windows.Forms;


    namespace MiPrograma
    {

        class Form1: Form
        {
            private static SystemState _incomingCallWatcher;

            public Form1()
            {
                    _incomingCallWatcher = new SystemState(SystemProperty.PhoneIncomingCall);
                    _incomingCallWatcher.Changed += new ChangeEventHandler(_incomingCall_Changed);
            }

            private void _incomingCall_Changed(object sender, ChangeEventArgs args)
            {
                ....
            }

        }
    }

        class Program
        {
            static void Main(string[] args)
            {
                   Application.Run(new Form1());
            }

        } 

    }



    ¿A qué se debe que en uno ejecute _incomingCall_Changed al recibir una llamada y en otro no? ¿Tal vez es un problema de hilos o de miembros estáticos?



    lunes, 25 de febrero de 2008 20:28

Todas las respuestas

  • Hola,,

     

    Es debido a que Application.Run(.) inicializa un bucle de escucha de mensajes. En .NET Framework hay (creo recordar) tres sobrecargas para el método Run pero en .NET CF sólo una con lo que debes especificar un formulario.

     

    De otra forma (sin que no haya formulario) no se me ocurre ninguna  opción más (en .NET CF).

     

    Saludos

    martes, 26 de febrero de 2008 8:52
    Moderador