如何用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"不能与类型参数一起使用"
我没有写我所有的课,只想知道热启动线程
感谢
您需要后退一步,然后读取编译器错误。Thread
不是泛型类型。实际上,并没有完全清楚您在这里要做什么,尤其是当您甚至还没有显示无参数getStatistics()
方法(应该称为GetStatistics()
以遵循.NET命名约定),并且所显示的参数化getStatistics()
方法没有返回类型时。
用lambda表达式启动线程很容易:
Thread thread = new Thread(() => CallSomeMethodHere());
thread.Start();
不过,目前还不清楚这是如何转化为您的示例代码的。
或者使用.NET4中的TPL,您可以(可能应该使用Task
或Task<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命名约定,顺便说一句…