2012-03-06 65 views
7

線程我有這個類:如何開始與lambda表達式C#

public class Statistics 
{ 
    List<string> _lsit; 

    public List<string> ipList 
    { 
     get { return _lsit; } 
     set { _lsit = value; } 
    } 

    string _Path = @"C:\Program Files\myApp.exe"; 
    string _Path = ""; 
    ProcessStartInfo ps = null; 

    public getStatistics(string Path) 
    { 
     _Path = Path; 
     getStatistics(); 
    } 
} 

我要啓動該功能統計不同THEAD,我沒有財產以後這樣的:

Statistics stat = new Statistics (some path); 
Thread<List<string>> lList = new Thread<List<string>>(() => tsharkIps.getStatistics()); 

但是編譯器錯誤說:「非泛型類型'System.Threading.Thread'不能用於類型參數」

我沒有寫我所有的類,只想知道熱啓動線程

感謝

+0

我認爲你正在尋找的,而不是線程任務 ...和那裏你應該使用Task.Factory來啓動任務;) – Carsten 2012-03-06 07:24:48

+0

請閱讀http://tinyurl.com/so-hints,並更多關注你的示例代碼(並清晰)爲你的下一個問題。 – 2012-03-06 07:39:00

回答

31

你需要退後一步,開始與和閱讀編譯器錯誤Thread不是通用類型。這真的不是在所有清楚你想在這裏做什麼,尤其是當你有連未顯示一個無參數getStatistics()方法(它應該被稱爲GetStatistics()遵循.NET命名約定)和參數getStatistics()方法你顯示不具有返回類型。

開始用lambda表達式一個線程是比較容易的部分:

Thread thread = new Thread(() => CallSomeMethodHere()); 
thread.Start(); 

是如何轉化爲您的示例代碼,雖然目前尚不清楚。

還是在.NET 4中使用TPL,你可以(也可能應該使用TaskTask<T>):

Task task = Task.Factory.StartNew(() => CallSomeMethodHere()); 

Task<string> task = Task.Factory.StartNew(() => CallSomeMethodReturningString()); 

這有可能是你真的想:

Task<List<string>> statisticsTask = Task.Factory.StartNew(() => { 
    Statistics statistics = new Statistics(path); 
    return statistics.ipList(); 
}); 

請注意,這裏的構造函數在新任務中被調用 - 這很重要,因爲它看起來可能會完成所有工作。 (這通常是一個壞主意開始,但這是另一回事。)

你應該看看在一般情況下,順便說一句.NET naming conventions ...

+0

謝謝,我會嘗試這個,但我不能使用任務,因爲我使用.net 3.5,和我的方法getStatistics()它只是例子 – user979033 2012-03-06 07:39:51