如何用lambda表达式c#启动Thread

本文关键字:启动 Thread 表达式 何用 lambda | 更新日期: 2023-09-27 18:27:03

我有这个类:

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"不能与类型参数一起使用"

我没有写我所有的课,只想知道热启动线程

感谢

如何用lambda表达式c#启动Thread

您需要后退一步,然后读取编译器错误Thread不是泛型类型。实际上,并没有完全清楚您在这里要做什么,尤其是当您甚至还没有显示无参数getStatistics()方法(应该称为GetStatistics()以遵循.NET命名约定),并且所显示的参数化getStatistics()方法没有返回类型时。

用lambda表达式启动线程很容易:

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

不过,目前还不清楚这是如何转化为您的示例代码的。

或者使用.NET4中的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命名约定,顺便说一句…