Ho una funzione GetPivotedDataTable (dati, "data", "id", "flag") restituisce i dati in formato pivot. Voglio chiamare questo metodo usando Task ma come passare più parametri in Task.Come passare più parametri nell'attività
10
A
risposta
28
Si potrebbe usare un'espressione lambda, o un Func per passare parametri :)
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
}
0
È possibile creare una classe helper che manterrà tutti i parametri necessari nell'attività.
2
Nel caso in cui i parametri sono di tipo diferent è possibile utilizzare una vasta gamma di oggetti e poi di nuovo a typecast i tipi di originale.
Dai un'occhiata a questo esempio di applicazione di 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();
}
tante grazie ... –
Sebbene orologio per cambiare le variabili (ad esempio l'avvio più attività con ID separati) - quindi si deve fare una copia locale del variabile: http://stackoverflow.com/questions/10179691/passing-arguments-with-changing-values-to-task-behaviour#10179856. – SharpC