none
Pulsar back varias veces con un messagebox (excepción muy extraña) RRS feed

  • Pregunta

  • Hola compañeros,

     

    os pongo en antecedentes.

    - Tengo page0 y page1.

    - En page0 tengo redefinido el evento "OnbackPressKey" con un messagebox "ok/cancel" / messageResult para evitar que el usuario salga de la aplicación sin querer.

    - Cuando en el page1 vuelve a la page0 , en el navigateTo del page0 tengo un proceso que dura casi 2 segundos.

    Durante este periodo el usuario puede darle 5 veces a "back", de las cuales 4 de ellas ejecutarían el evento "OnBackPressKey" de page0. La segunda vez que lo hace me dá una excepción no controlada sobre el MessageBox con código "0x8000ffff" .

    Código en page0:

     

     protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
          //Proceso de 2 segundos.
    
          base.OnNavigatedTo(e);
        }
    
    
        protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
        {
          msgresult = MessageBox.Show("¿ Desea abandonar la aplicación ?", "Atención", MessageBoxButton.OKCancel);
    
          if (msgresult == MessageBoxResult.OK)
            e.Cancel = false;
    
    
          base.OnBackKeyPress(e);
        }
    

     

    Metiendolo con hilo secundario:

     

        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
          BarraProgreso.Show();
    
          HiloSecundario.DoWork += new DoWorkEventHandler(HiloSecundario_DoWork);
          HiloSecundario.RunWorkerCompleted += new RunWorkerCompletedEventHandler(HiloSecundario_RunWorkerCompleted);
          HiloSecundario.RunWorkerAsync();
    
          base.OnNavigatedTo(e);
        }
    
    
        void HiloSecundario_DoWork(object sender, DoWorkEventArgs e)
        {
    
          this.Dispatcher.BeginInvoke(() =>
          {
             //Proceso de 2 segundos.
          });
    
        }
    
        void HiloSecundario_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
          BarraProgreso.Hide();
        }
    
        protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
        {
          msgresult = MessageBox.Show("¿ Desea abandonar la aplicación ?", "Atencion", MessageBoxButton.OKCancel);
    
          if (msgresult == MessageBoxResult.OK)
            e.Cancel = false;
    
    
          base.OnBackKeyPress(e);
        }
    

     


    Aún así me sigue dando problemas en el MessageBox del evento "OnBackPressKey".

    ¿Cual seria la manera más limpia de bloquear el hilo principal para que el usuario no pudiera pulsar muchas veces la tecla "back"?

     

    Pd: Comentar que la page1 es genérica llamandose en diferentes proyectos y no puedo utilizar su evento "navigateFrom".


    Gracias y feliz año.

     

     


    Cuanto más sabes, más ignorante te crees.


    • Editado Pedro Net martes, 10 de enero de 2012 7:15
    lunes, 9 de enero de 2012 8:25

Respuestas

  • Aunque no sea lo ideal porque no encuentro explicación del error se captura con un try / catch y si dá excepción hará un e.cancel = true .

     

    saludos


    Cuanto más sabes, más ignorante te crees.
    • Marcado como respuesta Pedro Net jueves, 12 de enero de 2012 9:09
    jueves, 12 de enero de 2012 9:09

Todas las respuestas

  • Aqui teneis un ejemplo práctico para ver el error con un código sencillo.

    Descarga:

    http://www.mediafire.com/?9yqqky3s7y4nyj3

     

    Para forzado el error solo teneis que hacer los siguientes pasos :

    1) Pulsar sobre el boton (te lleva a page1).

    2) Pulsar 4 o 5 veces seguidas el botón de "Back" . Ahí salta el error.

     

    saludos


    Cuanto más sabes, más ignorante te crees.
    lunes, 9 de enero de 2012 16:34
  • Aunque no sea lo ideal porque no encuentro explicación del error se captura con un try / catch y si dá excepción hará un e.cancel = true .

     

    saludos


    Cuanto más sabes, más ignorante te crees.
    • Marcado como respuesta Pedro Net jueves, 12 de enero de 2012 9:09
    jueves, 12 de enero de 2012 9:09