Я хочу выполнить некоторые операции над рабочим потоком, показывая пользователю индикатор выполнения. Я создал класс
public class ProgressBar
{
public void StartAsyncTask(Action action)
{
Task t = new Task(action);
t.start();
}
}
Я узнал, что я могу отправить любой метод в StartAsyncTask
следующим образом:
ProgressBar pb = new ProgressBar();
pb.StartAsyncTask( () => DoSomething(15, "something"));
public void DoSomething(int i, string s)
{
//do something
}
Прежде всего, я не могу понять, что есть и как выражается лямбда-выражение - () =>
- и как объект Action
передал делегат с неизвестным количеством параметров.
Я хотел бы использовать BackgroundWorker
с моим ProgressBar, но в этом случае мне нужно будет вызвать действие. Так что-то вроде этого:
void m_backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
Action action = e.Argument as Action; //same action here passed through EventArgs
//but already in a worker thread so no need for the Task object
//and now i need to somehow invoke the action object but i don't know what the parameters are.
action.Invoke( ? );
}
Как это возможно в первом примере выполнить действие без знания параметров в методе StartAsyncTask(Action action)
?
Почему мне нужно знать параметры при вызове действия в этом случае?
Все о том, как/почему/когда использовать "Action
", для меня довольно неясно, даже если я читаю документацию MSDN и некоторые другие темы здесь.
Любая информация об этом мне поможет.