2010-07-02 28 views
25

Tôi nghĩ rằng IsEnabled = false/true là bằng nhau với phương pháp Stop/Start của lớp System.Windows.Threading.DispatcherTimer Tôi có đúng không?Điểm khác biệt giữa 'IsEnabled' và 'Start/Stop' của DispatcherTimer là gì?

[EDIT] Bắt đầu(): bắt đầu hẹn giờ với đếm ngược toàn bộ khoảng thời gian. IsEnabled = false: tạm dừng hẹn giờ, đếm ngược khoảng thời gian vẫn còn. IsEnabled = true: tiếp tục bộ hẹn giờ & tiếp tục với thời gian đếm ngược được sử dụng cuối cùng. Dừng(): dừng hẹn giờ, sẽ đặt lại khoảng thời gian đếm ngược khoảng không?

Trả lời

40

Xem xét rằng Start/Stop chuyển đổi thuộc tính IsEnabled, giả định của bạn là gần.

Start/Stop khác với số Interval được đặt lại, khi chỉ bật/tắt IsEnabled sẽ không đặt lại Interval.

Từ MSDN:

Thiết IsEnabled false khi hẹn giờ được bắt đầu dừng bộ đếm thời gian.

Đặt IsEnabled thành true khi bộ hẹn giờ ngừng hoạt động bắt đầu hẹn giờ.

Bộ bắt đầu IsEnabled là true.

Bắt đầu đặt lại hẹn giờ Khoảng thời gian.

EDIT: Ý tôi là do khoảng thời gian được đặt lại không phải là thuộc tính Interval, mà khoảng thời gian nền xác định khoảng thời gian cho đến khi sự kiện đánh dấu tiếp theo được kích hoạt.

Ví dụ: Nếu bạn có một khoảng thời gian 1000ms và bạn dừng/vô hiệu hóa nó nếu với 250ms để chạy (nó chạy cho 750ms), đây là kết quả tùy thuộc vào cách bạn khởi động lại nó.

  • Nếu bạn bắt đầu nó với Start(), sau đó khoảng thông qua sẽ được reset về 0 và nó sẽ được 1000ms trước khi sự kiện Tick được nâng lên.
  • Nếu bạn bật lại với IsEnabled = true thì nó sẽ tiếp tục từ vị trí hiện tại của nó và sự kiện Tick sẽ được tăng lên trong 250ms.

Tôi hy vọng điều này sẽ làm rõ điều đó cho bạn.

+0

gì sẽ xảy ra với Interval nếu nó được reseted? Tại thời điểm này, tôi nghĩ khi gọi Start/Stop, giá trị Interval (int) không thay đổi. –

+0

Không phải giá trị khoảng thời gian, mà là khoảng thời gian nền. Tôi đã cập nhật câu trả lời của mình để trả lời câu hỏi này. –

+0

Cảm ơn! Nó khá rõ ràng ngay bây giờ ngoại trừ những gì xảy ra khi chúng ta gọi Stop()? Khoảng thời gian nền có được phục hồi không? –

3

Thực hiện DispatcherTimer.IsEnabled

public bool IsEnabled 
    { 
     get 
     { 
      return _isEnabled; 
     } 
     set 
     { 
      lock (_instanceLock) 
      { 
       if (!value && _isEnabled) 
       { 
        Stop(); 
       } 
       else 
       { 
        if (!value || _isEnabled) 
         return; 
        Start(); 
       } 
      } 
     } 
    } 
+0

http://reflector.webtropy.com/default.aspx/DotNET/DotNET/[email protected]/untmp/WIN_WINDOWS/lh_tools_devdiv_wpf/ Windows/wcp/Cơ sở/Hệ thống/Windows/Threading/DispatcherTimer @ cs/1/DispatcherTimer @ cs –

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