我想在向用户显示进度条的同时在工作线程上执行一些操作。我创建了一个类
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
对象如何传递具有未知数量参数的委托。
我想将 aBackgroundWorker
与我的 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 文档和其他一些线程,关于如何/为什么/何时使用 " " 的一切对我来说都不清楚。这方面的任何信息都会对我有所帮助。