我想在向用戶顯示進度條的同時在工作線程上執行一些操作。我創建了一個類如何使用.NET Action來執行一個參數數量未知的方法?
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
與我的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文檔和一些其他主題。有關這方面的任何信息都會對我有所幫助。
你打電話時,它需要知道的參數..否則,(如果有可能不通過參數)該函數不會有任何參數傳遞給它..因此,使你的第一個'parameter.Something'調用拋出'NullReferenceException'。 –