c#thread方法
如果我有
public void Method(int m) { ... }
如何为此方法创建线程?
线程t =新线程((方法));
t.Start(米);
不管用。
您调用的方法需要一个参数。 因为它有一个参数和返回类型的void,您可以使用以下内容
ThreadPool.QueueUserWorkItem(o => Method(m));
您无需使用此方法将int更改为方法签名中的对象。
使用ThreadPool比手动启动自己的Thread更有优势。 线程与ThreadPool
您可以使用lambda表达式执行此操作。 C#编译器在后台自动创建ThreadStart
委托。
Thread t = new Thread(() => Method(m)); t.Start();
请注意,如果稍后在代码中更改m
,则更改将传播到线程中(如果尚未输入Method
。 如果这是一个问题,你应该复制m
。
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();