2012-01-31 24 views
11

Tôi đang cố gắng đặt Bộ hẹn giờ trong Ứng dụng Cửa hàng Windows của mình.Làm cách nào để đặt Bộ hẹn giờ trong ứng dụng WinRT?

public void Start_timer() 
    { 

     Windows.UI.Xaml.DispatcherTimer timer = new DispatcherTimer();   
     timer.Tick += new Windows.UI.Xaml.EventHandler(timer_Tick); 
     timer.Interval = new TimeSpan(00, 1, 1); 
     bool enabled = timer.IsEnabled;    // Enable the timer 
     timer.Start();        // Start the timer  
     } 

Khi nhấp vào nút Tôi gọi phương thức trên để đặt Bộ hẹn giờ này. Nhưng khi Eventhandler for Tick được thiết lập, tôi gặp lỗi "Đã cố gắng đọc hoặc ghi bộ nhớ được bảo vệ. Đây thường là dấu hiệu cho thấy bộ nhớ khác bị hỏng".

Chúng ta có cần xử lý Bộ hẹn giờ khác nhau trong ứng dụng Windows Store không?

+0

Điều gì sẽ xảy ra nếu bạn đặt hẹn giờ được gửi và hẹn giờ.Tick + = timer_Tick; timer.Interval = TimeSpan mới (00, 1, 1); di chuyển đến contructor. Ngoài ra bool enabled = timer.IsEnabled; không có tác dụng, phải không? –

+1

@ lukas Xin lỗi, đã không nhận được điểm đầu tiên của bạn. Bạn có thể xây dựng – Sap

+2

riêng DispatcherTimer timer = new DispatcherTimer(); public YourClass() { timer.Tick + = timer_Tick; timer.Interval = new TimeSpan (00, 1, 1); } –

Trả lời

10

Giải pháp là để di chuyển Timer ra khỏi phương pháp ví dụ

private DispatcherTimer timer = new DispatcherTimer(); 

và thiết lập nó trong ctor

public TheClass() 
{ 
    timer.Tick += timer_Tick; 
    timer.Interval = new TimeSpan(00, 1, 1); 
    timer.Start(); 
} 

Khó có thể nói lý do không có mã đầy đủ là gì, nhưng nó có thể là hành vi của timer_Tick.

+0

bất lợi của nó là nó chạy trên thread UI. Vì vậy, nếu sự kiện hẹn giờ là thực hiện nhiệm vụ tiêu thụ thời gian/CPU, giao diện người dùng treo một chút – Tilak

+0

Không nếu điều này được thực hiện async :) – 70sCommander

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