2009-06-18 35 views
28

Giả sử chúng tôi đang sử dụng System.Windows.Forms.Timer trong ứng dụng .Net, Có sự khác biệt có ý nghĩa nào giữa việc sử dụng hay không các phương thức Start() và Stop() trên bộ đếm thời gian, so với sử dụng thuộc tính Enabled?Sử dụng System.Windows.Forms.Timer.Start()/Stop() so với Enabled = true/false

Ví dụ, nếu chúng ta muốn tạm dừng một bộ đếm thời gian trong khi chúng tôi thực hiện một số chế biến, chúng ta có thể làm:

myTimer.Stop(); 
// Do something interesting here. 
myTimer.Start(); 

hay, chúng ta có thể làm:

myTimer.Enabled = false; 
// Do something interesting here. 
myTimer.Enabled = true; 

Nếu không có ý nghĩa sự khác biệt, có sự đồng thuận trong cộng đồng về lựa chọn nào để chọn không?

Trả lời

30

Như đã trình bày bởi cả BFreeJames, không có sự khác biệt trong Start\Stop so Enabled liên quan đến chức năng. Tuy nhiên, quyết định sử dụng nên dựa trên bối cảnh và nguyên tắc về kiểu mã hóa của riêng bạn. Nó phụ thuộc vào cách bạn muốn một người đọc mã của bạn để giải thích những gì bạn đã viết.

Ví dụ: nếu bạn muốn họ xem những gì bạn đang làm khi bắt đầu một hoạt động và ngừng hoạt động đó, bạn có thể muốn sử dụng Start/Stop. Tuy nhiên, nếu bạn muốn tạo ấn tượng rằng bạn đang bật khả năng truy cập hoặc chức năng của đối tượng địa lý thì sử dụng Enabledtrue/false phù hợp hơn.

Tôi không nghĩ rằng sự đồng thuận được yêu cầu chỉ bằng cách sử dụng một hoặc khác, bạn thực sự phải quyết định dựa trên nhu cầu mã của bạn và bảo trì của nó.

+1

ok vậy về cơ bản khi giá trị ban đầu của Timer.Enabled là "false", và trong thời gian chạy , Tôi gọi là Start(), giá trị Timer.Enabled bây giờ sẽ "đúng" phải không? xin lỗi tôi nên viết một mã đơn giản để thay thế. –

+0

đúng. –

6

Không có ai giống nhau.

Xem Timer.EnabledTimer.Start/Timer.Stop

Để thêm vào Câu hỏi của bạn về sự đồng thuận, tôi sẽ nói thực tế có lẽ tốt hơn để sử dụng các phương pháp Start/Stop và nó cũng tốt hơn để có thể đọc Tôi cho rằng.

James.

5

Cá nhân, tôi không thích thiết lập thuộc tính có quá nhiều hậu quả ngoài việc thay đổi giá trị, vì vậy tôi có xu hướng dính vào Start()/Stop() vì nó rõ ràng (er) với tôi rằng khi bạn đang gọi phương thức, bạn đang yêu cầu điều gì đó xảy ra.

Điều đó nói rằng, tôi không cho rằng đó là một toàn bộ rất nhiều mơ hồ về những gì thiết Enabled = true sẽ làm :)

+0

Tôi không chắc chắn về điều đó ... cho đến khi tôi đọc tài liệu, mô hình tinh thần của tôi là Start()/Stop() khiến bộ hẹn giờ bắt đầu hoặc ngừng đếm, trong khi cài đặt Enabled sẽ điều chỉnh sự kiện có xảy ra khi bộ đếm thời gian đã trôi qua (điều này sẽ hữu ích trong trường hợp bạn có thể cần phải tạm thời ngăn các sự kiện, nhưng giữ cùng một lịch biểu cho chúng nếu bạn bật lại chúng sau). – Jules

+0

@Jules Đó là điều dễ hiểu, nhưng sai :) Nếu bạn đặt 'Enabled = true' thì sự kiện tiếp theo sẽ kích hoạt sau' Interval', không phải bất cứ khi nào người tiếp theo sẽ bắn nếu bạn không tắt chúng. –

+0

Có; quan điểm của tôi là đây là một cách giải thích hợp lý, vì vậy bạn nên tránh sự mơ hồ bằng cách không sử dụng thuộc tính Enabled, thay vì cho thấy nó thực sự đúng. :) – Jules

1

tôi không sử dụng timer.Stop()timer.Start(), bởi vì họ là những tàu ngầm của timer.Enabled. Nếu bạn muốn đặt hẹn giờ thành sai ở đầu ứng dụng (khi tải), bạn phải sử dụng timer.Enabled = false, timer.Stop() sẽ không hoạt động. Đây là lý do tại sao tôi sử dụng timer.Enabled = false/true.

2

Dưới đây là một mã đơn giản để kiểm tra cách Enabled, Start(), Stop() hoạt động với nhau.

Thực hiện một thử nghiệm ứng dụng Windows hình thức, thêm hai nút đơn giản và dán mã này bên Form1() constructor:

int c = 0; 
Timer tmr1 = new Timer() 
{ 
    Interval = 100, 
    Enabled= false 
}; 
tmr1.Tick += delegate 
{ 
    c++; 
}; 

// used to continously monitor the values of "c" and tmr1.Enabled 
Timer tmr2 = new Timer() 
{ 
    Interval = 100, 
    Enabled = true 
}; 
tmr2.Tick += delegate 
{ 
    this.Text = string.Format("c={0}, tmr1.Enabled={1}", c, tmr1.Enabled.ToString()); 
}; 

button1.Click += delegate 
{ 
    tmr1.Start(); 
}; 
button2.Click += delegate 
{ 
    tmr1.Stop(); 
}; 
Các vấn đề liên quan