2012-03-14 26 views
5

Tôi dường như không tạo được tác vụ tiền cảnh. chủ đề chính của tôi là giả sử gọi một chuỗi khác và sau đó thoát. thread khác cho rằng để chạy mãi mãiCách tạo tác vụ nền trước?

void MainThreadMain() 
{ 
    task_main = Task.Factory.StartNew(() => OtherThread()) ; 
    return; 
} 

void OtherThread() 
{ 
    while(true) 
    { 
    TellChuckNorrisJoke(); 
    } 
} 

làm thế nào tôi có thể đảm bảo task_main sẽ tiếp tục chạy ngay cả rằng Chủ đề chính là chết? tôi cho rằng il làm:

task_main.IsBackgorund = false; 

nhưng không có lựa chọn như vậy: \ tôi có thể làm chủ đề chính của tôi để chờ đợi một tín hiệu từ chủ đề khác của tôi rằng nó truyền cho chế độ Foreground. nhưng thats đồng bằng ngớ ngẩn.

+1

Bạn đảm bảo điều này bằng cách * không * bằng cách sử dụng một chuỗi. Đơn giản chỉ cần gọi OtherThread() trực tiếp, sau khi đổi tên nó tất nhiên. –

+2

bài đăng này có thể hữu ích. http://stackoverflow.com/questions/6156878/can-threads-started-by-tasks-parallel-library-act-as-foreground-threads – Krishna

Trả lời

5

Câu hỏi rõ ràng là: tại sao bạn không chạy công việc của mình trên chuỗi chính?

Giả sử đây không phải là tùy chọn, bạn nên sử dụng Thread không phải là Task. Sau đó, bạn có thể đặt:

Thread.IsBackground = false; 

Điều này sẽ ngăn ứng dụng của bạn chấm dứt khi chuỗi công nhân đang chạy.

+1

Tôi đang tạo một dịch vụ. khi tôi hiểu nó, phương thức OnStart của dịch vụ giả sử gọi một luồng khác và trả về. nếu theres không có thread để giữ cho chương trình còn sống, nó sẽ thoát. – Nahum

+2

Ah! Dịch vụ Windows được kiểm soát bởi [Trình quản lý kiểm soát dịch vụ] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms685150 (v = vs.85) .aspx). Như vậy, nó không có một "Main Thread" bình thường. 'OnStart' được gọi bởi SCM và bạn chính xác ở chỗ nó phải trở lại nhanh chóng. Vì vậy, có, nó có ý nghĩa để bắt đầu một 'Thread' (không phải là một' Task'). Bạn cũng sẽ phải thực hiện 'OnPause' và' OnStop'. Xem [MSDN: Ứng dụng Dịch vụ Windows] (http://msdn.microsoft.com/en-us/library/y817hyb6.aspx). –

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