ユーザーにプログレスバーを表示しながら、ワーカースレッドでいくつかの操作を実行したいと思います。クラスを作成しました
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
オブジェクトが不明な数のパラメーターを持つデリゲートをどのように渡すのかを理解できないようです。
ProgressBarでを使用し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のドキュメントやその他のスレッドを読んだとしても、「」をどのように/なぜ/いつ使用するかについてのすべてが私にはかなり不明確です。これに関する情報は私を助けます。