我可以在线程中发送一个参数
class myThread
{
Thread thread;
public myThread(string name, int st)
{
thread = new Thread(this.Get_IP);
thread.Name = name;
thread.Start(st);//передача параметра в поток
thread.Join();
}
void Get_IP(object st)
{
for (int ii = 0; ii < (int)st; ii++)
{
// smth
}
}
}
但我需要发送其中两个 例如
for (int ii = (int)st; ii < (int)fi; ii++)
{
// smth
}
有一种方法可以将2个参数放在一起
void A(int a, int b) { }
和
ThreadStart starter = delegate { A(0, 10); };
但我如何将它们发送给线程?
答案 0 :(得分:3)
您可以使用lambda表达式将更多参数传递给线程。像这样:
Thread thread = new Thread(()=>A(5,6));
答案 1 :(得分:2)
Thread.Start
方法接受object
作为参数。您可以传递一组数值。
thread.Start(new object[] { a, b });
答案 2 :(得分:2)
将两个变量作为成员放在类中:
class MyThread {
private Thread _thread;
private int _start, _finish;
public MyThread(string name, int start, int finish) {
_start = start;
_finish = finish;
_thread = new Thread(Get_IP);
_thread.Name = name;
_thread.Start();
_thread.Join();
}
void Get_IP() {
for (int ii = _start; ii < _finish; ii++) {
// smth
}
}
}
注意:在启动线程后立即调用Join
使用线程是没有意义的。
答案 3 :(得分:1)
创建一个包含所需传递的值的类,并将该类的实例传递给您的线程。
答案 4 :(得分:1)
如果您需要发送2个参数,您可以按照您喜欢的任何类型发送它们,但是在启动新线程的方法中,您必须将它/它们取消包装:
void MyMethod()
{
int a = 1;
int b = 2;
int[] data = new[] { a, b };
Thread t = new Thread(new ParameterizedThreadStart(StartThread));
t.Start(data);
}
private void StartThread(object obj)
{
int[] data = obj as int[];
if (data != null)
{
int a = data[0];
int b = data[1];
}
}
注意:新线程调用的方法只能接受对象参数。这个对象里面的内容不是代码的关注,可以是任何东西,比如我的2个整数。 然后,您只需将对象解包为原始数据类型。