web-dev-qa-db-fra.com

Comment passer plusieurs paramètres dans une tâche

J'ai une fonction GetPivotedDataTable (data, "date", "id", "flag") renvoie des données au format pivoté. Je veux appeler cette méthode à l'aide de la tâche mais comment passer plusieurs paramètres dans la tâche.

10
J R B

Vous pouvez utiliser une expression lambda ou un Func pour passer des paramètres :)

public Form1()
{
    InitializeComponent();

    Task task = new Task(() => this.GetPivotedDataTable("x",DateTime.UtcNow,1,"test"));
    task.Start();
}

public void GetPivotedDataTable(string data, DateTime date, int id, string flag)
{
    // Do stuff
}
28
Martijn van Put

Dans le cas où vos paramètres sont de types différents, vous pouvez utiliser un tableau d’objets, puis reconfigurer les types d’origine.

Découvrez cet exemple d'application de la console:

    static void Main(string[] args)
    {
        var param1String = "Life universe and everything";
        var param2Int = 42;

        var task = new Task((stateObj) =>
            {
                var paramsArr = (object[])stateObj; // typecast back to array of object

                var myParam1String = (string)paramsArr[0]; // typecast back to string 
                var myParam2Int = (int)paramsArr[1]; // typecast back to int 

                Console.WriteLine("");
                Console.WriteLine(string.Format("{0}={1}", myParam1String, myParam2Int));
            },
            new object[] { param1String, param2Int } // package all params in an array of object
        );

        Console.WriteLine("Before Starting Task");
        task.Start();
        Console.WriteLine("After Starting Task");

        Console.ReadKey(); 
    }
2
Entrodus

Vous pouvez créer un helper class qui contiendra tous les paramètres dont vous avez besoin dans votre tâche.

0
user2647939