Creating a thread in C#

十年热恋 提交于 2021-02-08 11:03:07

问题


How would I go about in creating a thread in C#?

In java I would either implement the Runnable interface

class MyThread implements Runnable{
public void run(){
//metthod
}

and then

MyThread mt = new MyThread;
Thread tt = new Thread(mt);
tt.start()

or I could simply extend the Thread class

class MyThread extends Thread{
public void run(){
//method body
}

and then

MyThread mt = new MyThread
mt.start();

回答1:


No, contrary to Java, in .NET you can't extend the Thread class because it's sealed.

So to execute a function in a new thread the most naive way is to manually spawn a new thread and pass it the function to be executed (as anonymous function in this case):

Thread thread = new Thread(() => 
{
    // put the code here that you want to be executed in a new thread
});
thread.Start();

or if you don't want to use an anonymous delegate then define a method:

public void SomeMethod()
{
    // put the code here that you want to be executed in a new thread
}

and then within the same class start a new thread passing the reference to this method:

Thread thread = new Thread(SomeMethod);
thread.Start();

and if you want to pass parameters to the method:

public void SomeMethod(object someParameter)
{
    // put the code here that you want to be executed in a new thread
}

and then:

Thread thread = new Thread(SomeMethod);
thread.Start("this is some value");

That's the native way to execute tasks in background threads. To avoid paying the high price of creating new threads you could use one of the threads from the ThreadPool:

ThreadPool.QueueUserWorkItem(() =>
{
    // put the code here that you want to be executed in a new thread
});

or using an asynchronous delegate execution:

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);

And yet another, and more modern way to execute such tasks is to use the TPL (starting from .NET 4.0):

Task.Factory.StartNew(() => 
{
    // put the code here that you want to be executed in a new thread
});

So, yeah, as you can see, there are like gazzilions of techniques that could be used to run a bunch of code on a separate thread.



来源:https://stackoverflow.com/questions/14041535/creating-a-thread-in-c-sharp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!