Tôi đang cố gắng kích hoạt trình xử lý sự kiện được gán cho bộ hẹn giờ. Làm thế nào tôi có thể kiểm tra phương pháp riêng tư này ở đây?Làm cách nào để chạy trình xử lý sự kiện được gán cho mô hình?
public interface ITimer
{
void Start();
double Interval { get; set; }
event ElapsedEventHandler Elapsed;
}
Lớp khách hàng chỉ định trình xử lý sự kiện cho đối tượng này. Tôi muốn kiểm tra logic trong lớp này.
_timer.Elapsed += ResetExpiredCounters;
Và phương pháp giao là tin
private void ResetExpiredCounters(object sender, ElapsedEventArgs e)
{
// do something
}
Tôi muốn có xử lý sự kiện này trong mô hình của tôi và chạy nó bằng cách nào đó. Tôi có thể làm cái này như thế nào?
Cập nhật:
tôi nhận ra tôi đã nâng cao sự kiện này trước khi tôi được giao xử lý sự kiện. Tôi sửa chữa điều đó nhưng tôi vẫn nhận được lỗi này:
tôi nâng nó như thế này:
_timer.Raise(item => item.Elapsed += null, ElapsedEventArgs.Empty);
hoặc
_timer.Raise(item => item.Elapsed += null, EventArgs.Empty);
Cả hai sẽ không hoạt động.
Cập nhật:
Đây là điều mà làm việc cho tôi. Lưu ý rằng nó không hữu ích nếu bạn đang cố chuyển thông tin tới trình xử lý sự kiện như Jon đã chỉ ra trong các bình luận. Tôi chỉ sử dụng nó để giả mạo trình bao bọc cho lớp System.Timers.Timer.
_timer.Raise(item => item.Elapsed += null, new EventArgs() as ElapsedEventArgs);
Cuối cùng, điều này sẽ không giúp ích gì nếu bạn cần sử dụng đối số sự kiện vì nó sẽ luôn luôn rỗng. Tuy nhiên, đó là cách duy nhất vì ElapsedEventArgs chỉ có một hàm tạo bên trong.
"Object kiểu 'System.EventArgs' không thể được chuyển đổi để nhập 'System.Timers.ElapsedEventArgs' "- Phần nào không rõ ràng? – Groo
Tôi vẫn nhận được lỗi đó ngay cả khi tôi vượt qua ElapsedEventArgs. Làm thế nào tôi có thể nâng cao sự kiện đó? –
Có phải 'ElapsedEventHandler' trong giao diện' ITimer' của bạn thực sự 'System.Timers.ElapsedEventHandler'? – Groo