2015-10-19 73 views
0

我有以下Windows服務代碼,它啓動一個新線程來執行長時間運行的任務。當我停止Windows服務時,任務停止。Windows服務和線程工作代碼的靜態與非靜態方法

public partial class WorkerService : ServiceBase 
{ 
    protected override void OnStart(string[] args) 
    { 
     Thread thread; 
     thread = new Thread(DoWork); 
     thread.IsBackground = true; 
     thread.Start(); 
    } 

    //OnStop code here 

    private static void DoWork() 
    { 
     //Long-running task code here 
    } 
} 

DoWork方法是靜態還是不行?我在Web上找到的大多數示例代碼都使用靜態代碼。但是,代碼似乎沒有靜態工作正常。

private void DoWork() 
    { 
     //Long-running task code here 
    } 

有沒有什麼我應該知道什麼時候不使用我的DoWork方法的靜態?

+0

此外,靜態或非靜態線程方法在Windows服務應用程序上無關緊要。 –

回答

1

Here是一個鏈接到類似的SO問題關於靜態方法是線程安全的。在處理線程和線程池時,我總是實例化類。一個構造函數,一個使用,一個目的。一個線程是一種特殊的用途機制,我沒有看到爲什麼它應該被共享或靜態或通過使你的靜態方法獲得任何收益。

+0

「一個構造函數,一個用途,一個目的」。我喜歡你思考的方式。 – thd