2013-12-01 3 views
1

Я использую следующий код, чтобы открыть тему:C# отправить параметры анонимной функции потока

var thread = new Thread(() =>{ 
    /*thread code*/ 
}); 
thread.Name = "Thread1"; 
thread.Start();` 

Я желаю, чтобы передать объект в функцию потока, так что я попробовал этот подход:

var thread = new Thread(() =>(myObject){ 
}); 

Но это не работает, поэтому у вас есть идея, как это сделать?

+1

'() =>() {}' не будет работать. Всегда отправляйте действительный код. –

+1

Это много раз повторяется, но более важно, вы, вероятно, вообще не хотите нить. –

+0

Зачем усложнять вещи с помощью анонимного метода? Каковы ваши аргументы в пользу использования анонимного метода? –

ответ

2

Определить объект, который вы хотите сослаться из вашей анонимной функции перед вашей функции, например:

var myObject = ... // <<== Define object here 
var thread = new Thread(() => { 
    Console.WriteLine("My object: {0}", myObject); 
    /*thread code*/ 
}); 
thread.Name = "Thread1"; 
thread.Start(); 

C# компилятор будет автоматически захватывать myObject объект в процессе создания анонимной функции, что делает его доступный для использования внутри тела функции.

1

версии вы используете это ThreadStart, который не принимает никаких аргументов, мы должны использовать ParameterizedThreadStart, который принимает 1 аргумент (типа object), поэтому соответствующее лямбда-выражение для этого делегата было бы что-то вроде этого:

var thread = new Thread((arg) =>{ 
    //use the arg here ... 
}); 
//then run the thread like this 
thread.Start(myObject); 

Обратите внимание, что метод Start имеет перегруз с одним аргументом, позволяющим передавать фактический аргумент для потока при его запуске.

Смежные вопросы