繁体   English   中英

c#thread方法

[英]c# thread method

如果我有

public void Method(int m)
{
  ...
}

如何为此方法创建线程?

线程t =新线程((方法));

t.Start(米);

不管用。

您可以使用lambda表达式执行此操作。 C#编译器在后台自动创建ThreadStart委托。

Thread t = new Thread(() => Method(m));
t.Start();

请注意,如果稍后在代码中更改m ,则更改将传播到线程(如果尚未输入Method 如果这是一个问题,你应该复制m

您调用的方法需要一个参数。 因为它有一个参数和返回类型的void,您可以使用以下内容

ThreadPool.QueueUserWorkItem(o => Method(m));

您无需使用此方法将int更改为方法签名中的对象。

使用ThreadPool比手动启动自己的Thread更有优势。 线程与ThreadPool

ThreadStart tsd = new ThreadStart(ThreadMethod);
Thread t = new Thread(tsd);
t.Start();

线程方法需要是一个返回类型为void且不接受任何参数的方法。

public void ThreadMethod() {.....}

另一个变体是ParameterizedThreadStart

ParameterizedThreadStart ptsd = new ParameterizedThreadStart(ThreadParamMethod);
Thread t = new Thread(ptsd);
t.Start(yourIntegerValue);

ThreadParamMethod是一个返回类型为void并接受一个object类型参数的方法。 但是你可以传递任何东西作为对象。

public void ThreadParamMethod(object arg) {.....}

方法需要使用对象而不是int才能使用ParameterizedThreadStart委托。

因此,将m更改为对象并首先将其转换为int。

请试试:

Thread t = new Thread(new ThreadStart(method)); 
t.Start();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM