2012-06-28 45 views
10

Thứ tự các cuộc gọi phương thức xảy ra trong dịch vụ windows theo thứ tự nào? Chúng tôi đang gặp vấn đề về thời gian và tôi nghĩ đó là do người xây dựng mất quá nhiều thời gian để hoàn tất quá trình xử lý.Lệnh gọi phương thức trong một dịch vụ Windows

Đây là một vấn đề tương tự mà tôi nghĩ rằng chúng tôi đang có Error 1053 the service did not respond to the start or control request

Tuy nhiên, chúng tôi rất ngạc nhiên theo thứ tự nào và khi các phương pháp chính, OnStart, InitializeComponent vv được gọi và/hoặc khi họ nên được gọi.

Đồng thời, phương pháp OnStart có phải là nơi tốt nhất để đặt tất cả quá trình xử lý không?

** Giải pháp

Made một chút thời gian để thực hiện một dịch vụ thử nghiệm và kiểm tra các câu trả lời dưới đây và phát hiện ra thời gian ra là đến từ việc xử lý phương thức Main cũng như các nhà xây dựng được gọi là trong phương thức Main gây ra nó hết thời gian. Di chuyển tất cả mọi thứ vào OnStart cũng như chỉ xoay một sợi dường như hoạt động. Chi tiết ở đây. http://www.adamthings.com/post/2012/06/28/error-1053-the-service-did-not-respond-to-the-start-or-control-request-in-a-timely-fashion/

+0

Khởi động phải bắt đầu một chuỗi khác xử lý tất cả quá trình xử lý của bạn, vì vậy phương thức có thể trở lại ngay lập tức. Theo kinh nghiệm của tôi, nó hoạt động tốt nhất. Tôi sẽ không đặt bất cứ thứ gì trong InitializeComponent. – Mangist

+0

OnStop nên hủy bỏ chủ đề và chờ cho đến khi hoàn tất :) – Mangist

+1

Bạn có thể tìm hiểu bằng cách đặt điểm ngắt. – usr

Trả lời

6

Đừng chặn trong phương pháp OnStart(). Có vẻ như bạn đang làm điều này.

Tạo một chuỗi riêng biệt trong phương thức OnStart() và thoát ra khỏi đó.

tôi đã không kiểm tra này, nhưng một cái gì đó tương tự như:

protected override void OnStart(string[] args) 
{ 
    var worker = new Thread(DoWork); 
    worker.IsBackground = false; 
    worker.Start(); 

    base.OnStart(args); 
} 

private void DoWork() 
{ 
    while (!_stopRequested) // (set this flag in the OnStop() method) 
    { 
     // processing goes here 
    } 
} 

Để trả lời câu hỏi của bạn về thứ tự của các sự kiện, chỉ cần thiết lập báo cáo vết trong từng phương pháp. Tôi không chắc sẽ hữu ích đến mức nào. Thông báo (Dịch vụ không đáp ứng yêu cầu bắt đầu ...) mà bạn đang nhận được là dấu hiệu của việc chặn (hoặc dùng quá lâu) trong một phương thức nên thực thi tương đối nhanh.

+0

Đây là một trợ giúp tuyệt vời trong việc làm cho suy nghĩ của tôi chuyển động. Cảm ơn bạn đã phản hồi. Đăng những phát hiện của tôi trong các ý kiến ​​trên bài viết gốc. – Adam

6

Tôi tin rằng thứ tự là

Để đặt mã của bạn ở đâu, tôi khuyên bạn nên đặt bất kỳ mã nào có thể được lưu trữ trong Main và bất kỳ mã nào tái chế trên mỗi lần bắt đầu bên trong OnStart. Tuy nhiên, bạn không nên thực hiện bất kỳ xử lý thực tế nào trong OnStart, chỉ cần khởi tạo. Sử dụng một chuỗi riêng biệt để thực hiện phần lớn logic của bạn.

Ngoài ra, MSDN is helpful with this

+0

Cảm ơn bạn đã trả lời , nó rất hữu ích. Đăng những phát hiện của tôi trong các ý kiến ​​trên bài viết gốc. – Adam

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