在c#中创建线程
本文关键字:线程 创建 | 更新日期: 2023-09-27 17:49:30
如何在c#中创建线程?
在java中我要么实现Runnable接口
class MyThread implements Runnable{
public void run(){
//metthod
}
和
MyThread mt = new MyThread;
Thread tt = new Thread(mt);
tt.start()
或者我可以直接扩展Thread类
class MyThread extends Thread{
public void run(){
//method body
}
和
MyThread mt = new MyThread
mt.start();
不,与Java相反,在。net中不能扩展Thread类,因为它是密封的。
所以要在一个新线程中执行一个函数,最简单的方法是手动创建一个新线程,并将要执行的函数传递给它(在这种情况下是匿名函数):
Thread thread = new Thread(() =>
{
// put the code here that you want to be executed in a new thread
});
thread.Start();
或者如果你不想使用匿名委托,那么定义一个方法:
public void SomeMethod()
{
// put the code here that you want to be executed in a new thread
}
,然后在同一个类中启动一个新线程,传递对这个方法的引用:
Thread thread = new Thread(SomeMethod);
thread.Start();
,如果你想传递参数给方法:
public void SomeMethod(object someParameter)
{
// put the code here that you want to be executed in a new thread
}
然后:
Thread thread = new Thread(SomeMethod);
thread.Start("this is some value");
这是在后台线程中执行任务的原生方式。为了避免为创建新线程付出高昂的代价,您可以使用ThreadPool中的一个线程:
ThreadPool.QueueUserWorkItem(() =>
{
// put the code here that you want to be executed in a new thread
});
或使用异步委托执行:
Action someMethod = () =>
{
// put the code here that you want to be executed in a new thread
};
someMethod.BeginInvoke(ar =>
{
((Action)ar.AsyncState).EndInvoke(ar);
}, someMethod);
还有另一种更现代的执行这些任务的方法是使用TPL(从。net 4.0开始):
Task.Factory.StartNew(() =>
{
// put the code here that you want to be executed in a new thread
});
所以,是的,正如你所看到的,有无数的技术可以用来在单独的线程上运行一堆代码