2013-07-17 2 views
0

Я видел одну программу, которая была о синхронизации и использовании потоков. В одной части программы я увидел это лямбда-выражение, и я смутился.Лямбда-выражения без ввода

for (int i = 0; i < 100; i++) 
{ 
    Thread.Sleep(100); 
    progressBar1.BeginInvoke(new Action(() => 
    { 
    progressBar1.Value = i; 
    listBox1.Items.Add(i.ToString()); 
    })); 
} 

Мой вопрос в том, почему это выражение лямбда не имеет никаких входных аргументов?

+0

Темы (по умолчанию) не получает никакого входного аргумента (неявно) и не возвращает ничего –

ответ

1

В описании Control.BeginInvoke метода там написано:

// Summary: 
//  Executes the specified delegate asynchronously on the 
//  thread that the control'sunderlying handle was created on. 
// 
// Parameters: 
// method: 
//  A delegate to a method that takes no parameters. 

Из статьи Action Delegate MS:

Инкапсулирует метод, который не имеет параметров и не возвращает значение ,

1

Целью здесь является выполнение некоторых инструкций, которые получают доступ к пользовательскому интерфейсу в потоке пользовательского интерфейса. Действие не требует ввода (i, progressBar1 и listBox1) и не имеет выходных, только побочных эффектов (изменение пользовательского интерфейса).

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