2015-08-06 16 views
8

Tôi có một COM add-in cho các ứng dụng văn phòng mà thực hiện một hoạt động trong nền mỗi 30 phút sử dụng một hoạt độngĐiều gì sẽ xảy ra với Bộ hẹn giờ khi PC khởi động từ chế độ ngủ?

System.Timers.Timer 

nền này thực hiện xác thực người dùng qua một kết nối Internet, và tôi có báo cáo từ một số người dùng mà xác thực thất bại khi máy tính của họ đánh thức khỏi giấc ngủ. Tôi không thể tự mình tái tạo hành vi này, vì vậy lý thuyết của tôi là khi PC khởi động, hoạt động nền thực thi trước khi kết nối Internet được khôi phục (có lẽ kết nối đã bị đóng bởi Windows khi máy tính chuyển sang chế độ ngủ).

Nói chung, nếu máy tính chuyển sang chế độ ngủ sau một khoảng thời gian không hoạt động, điều gì sẽ xảy ra khi PC khởi động (theo điều khoản của Timers)? Ví dụ: bị tạm dừng trong khi ngủ, sau đó tiếp tục lại trong khoảng thời gian đã đặt khi PC khởi động (ví dụ: nếu Timer là 10 phút vào khoảng thời gian máy tính chuyển sang chế độ ngủ, sự kiện Timer.Elapsed sẽ không cháy cho đến 20 phút sau PC đánh thức)? Sự kiện Timer.Elapsed đã được xếp hàng đợi để nó có thể kích hoạt ngay khi PC khởi động không? Windows có dừng Timer khi PC chuyển sang chế độ ngủ không? Hoặc, không Timer tiếp tục chạy trong khi máy tính ngủ, nhưng kể từ khi kết nối Internet bị hỏng (có lẽ), thao tác nền không thể thực hiện xác thực người dùng?

+0

Bạn có thể đăng ký các sự kiện nguồn của Windows, nếu đó là bất kỳ việc sử dụng nào: [Nhận các sự kiện Sleep/Hibernate và Resume/Wakeup trong Visual Basic.NET] (http://stackoverflow.com/a/11598083/1115360). –

+0

Có vấn đề tương tự xảy ra nếu người dùng mất kết nối của mình trong một phút ngay trước khi bộ đếm thời gian thực thi? –

+1

Ứng dụng của bạn cần phải chịu đựng mất kết nối tạm thời dù sao cũng có khả năng. Bạn cần một cái gì đó để đối phó với điều đó như thử lại. – usr

Trả lời

-2
static void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
    { 
     Console.WriteLine(String.Format("{0}:{1}:{2} : Timer fired", 
      DateTime.Now.ToLocalTime().Hour, 
      "Execute:" + DateTime.Now.ToLocalTime().Minute, 
      DateTime.Now.ToLocalTime().Second)); 
    } 

khi kích hoạt sự kiện này, bạn sẽ biết thời gian bắt đầu và bất cứ khi nào bạn muốn thời gian thực hiện lưu trữ nơi bạn quản lý thời gian thực thi. nếu máy của bạn đi ngủ hoặc ngủ đông và bắt đầu một lần nữa máy của bạn trước khi thực hiện thời gian sau đó bạn có thể kiểm tra từ thời gian thực hiện cuối cùng của bạn và có thể hành động thực hiện.

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