我想在工作线程上执行一些操作,同时向用户显示进度条。我已经创建了一个类
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
}
首先,我好像不太理解什么是lambda表达式 - () =>
- 以及如何翻译,以及如何将Action
对象传递给一个具有未知参数数量的委托。
我想使用BackgroundWorker
来控制我的进度条,但在这种情况下,我需要调用该操作。所以类似这样:
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文档和其他一些帖子。任何关于此的信息都将对我有所帮助。