2012-05-05 10 views
7

Estoy desarrollando una aplicación en Windows 8 Visual Studio 11, y quiero definir un controlador de eventos para una instancia DispatcherTimer de la siguiente manera:definir controlador de eventos para Tick caso de DispatcherTimer en Windows 8 aplicación

public sealed partial class BlankPage : Page 
    { 

     int timecounter = 10; 
     DispatcherTimer timer = new DispatcherTimer(); 
     public BlankPage() 
     { 
      this.InitializeComponent(); 
      timer.Tick += new EventHandler(HandleTick); 
     } 

     private void HandleTick(object s,EventArgs e) 
     { 

      timecounter--; 
      if (timecounter ==0) 
      { 
       //disable all buttons here 
      } 
     } 
     ..... 
} 

Pero Obtengo el siguiente error:

Cannot implicitly convert type 'System.EventHandler' to 'System.EventHandler<object>' 

Soy un desarrollador novato de viudas 8 aplicaciones.

¿Podría ayudarme?

Respuesta

8

casi lo tenía :) No es necesario crear una instancia de un nuevo objeto de eventhandler, solo necesita señalar el método que maneja el evento. Por lo tanto, un eventhandler.

 int timecounter = 10; 
    DispatcherTimer timer = new DispatcherTimer(); 
    public BlankPage() 
    { 
     this.InitializeComponent(); 

     timer.Tick += timer_Tick; 
    } 

    protected void timer_Tick(object sender, object e) 
    { 
     timecounter--; 
     if (timecounter == 0) 
     { 
      //disable all buttons here 
     } 
    } 

Trate de leer sobre los delegados a entender los eventos Understanding events and event handlers in C#

+0

Pero no tienen este problema en aplicaciones de Windows? Hacemos ? –

+0

Un delegado y un controlador de eventos es el mismo en la plataforma. No es un "problema", es cómo funciona :) – danielovich

+0

Por problema quise decir 'System.EventHandler ' y no quiero decir que sea un error –

2

WinRT hace uso de los genéricos más que el estándar de tiempo de ejecución .NET. DispatcherTimer.Tick como defined in WinRT is here:

public event EventHandler<object> Tick 

Mientras que el WPF DispatcherTimer.Tick is here evento público manejador de sucesos Tick

También tenga en cuenta que usted no tiene que utilizar el método estándar llamado para crear un controlador de eventos. Puede usar una lambda para hacerlo en su lugar:

int timecounter = 10; 
DispatcherTimer timer = new DispatcherTimer(); 
public BlankPage() 
{ 
    this.InitializeComponent(); 

    timer.Tick += (s,o)=> 
    { 
     timecounter--; 
     if (timecounter == 0) 
     { 
      //disable all buttons here 
     } 
    }; 
} 
3

Su código espera que HandleTick tenga dos Object Params. No es un param de objeto y un param EventArg.

private void HandleTick(object s, object e) 

NO

private void HandleTick(object s,EventArgs e) 

Este es un cambio que se llevó a cabo para Windows 8.

Cuestiones relacionadas