2012-05-05 17 views
7

Tôi đang phát triển một ứng dụng trong windows 8 Visual studio 11, và tôi muốn xác định phương thức thụ lý sự kiện cho một trường hợp DispatcherTimer như sau:định xử lý sự kiện cho Tick trường hợp DispatcherTimer trong windows 8 ứng dụng

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 
      } 
     } 
     ..... 
} 

Nhưng Tôi nhận được Lỗi sau:

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

Tôi là một nhà phát triển mới làm quen với việc mở rộng 8 ứng dụng.

Bạn có thể giúp tôi không?

Trả lời

8

gần như đã có nó :) Bạn không cần phải khởi tạo đối tượng eventhandler mới, bạn chỉ cần trỏ đến phương thức xử lý sự kiện. Do đó, một 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 
     } 
    } 

Cố gắng đọc lên các đại biểu hiểu sự kiện Understanding events and event handlers in C#

+0

Nhưng chúng tôi không có vấn đề này trong các ứng dụng Windows? Chúng ta? –

+0

Một đại biểu và một tổ chức sự kiện là như nhau trên nền tảng. Nó không phải là một "vấn đề", nó hoạt động như thế nào :) – danielovich

+0

Bởi vấn đề tôi có nghĩa là 'System.EventHandler ' và tôi không có nghĩa là một lỗi –

2

WinRT tận dụng Generics hơn tiêu chuẩn .NET Runtime. DispatcherTimer.Tick như defined in WinRT is here:

public event EventHandler<object> Tick 

Trong khi WPF DispatcherTimer.Tick is here sự kiện công cộng EventHandler Tick

Cũng lưu ý rằng bạn không cần phải sử dụng tiêu chuẩn phương thức có tên để tạo ra một Handler tổ chức sự kiện. Bạn có thể sử dụng lambda để làm điều đó tại chỗ:

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

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

Mã của bạn đang chờ HandleTick có hai tham số Object. Không phải là một đối tượng param và một param EventArg.

private void HandleTick(object s, object e) 

KHÔNG

private void HandleTick(object s,EventArgs e) 

Đây là một sự thay đổi đó diễn ra cho Windows 8.

Các vấn đề liên quan