2012-03-06 38 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