2013-08-03 7 views

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

tante grazie ... –

+2

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

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(); 
    }