Görev

2013-08-03 38 views
10

içinde birden çok parametre nasıl iletilir GetPivotedDataTable (veri, "tarih", "id", "bayrak"), Pivoted biçimindeki verileri döndürüyor. Görev yöntemini kullanarak bu yöntemi çağırmak istiyorum, ancak Görev'de birden çok parametreyi nasıl geçireceğim.Görev

cevap

28

Sen parametrelerini geçirmek için lambda ifade veya bir Func kullanabilirsiniz :) senin parametreleri ayrılmakta tiptir durumunda

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

kadar çok teşekkürler ... –

+2

(örneğin ayrı kimlikleri ile birden görevlere başlamadan gibi) değişkenlerini değiştirme izle rağmen - o zaman yerel bir kopyasını yapmak zorunda değişken: http://stackoverflow.com/questions/10179691/passing-arguments-with-changing-values-to-task-behaviour#10179856. – SharpC

0

Görevinizde gereksinim duyduğunuz tüm parametreleri tutacak bir yardımcı sınıfı oluşturabilirsiniz.

2

nesnenin bir dizi kullanmak ve daha sonra tekrar orijinal türlerine typecasting olabilir.

Kontrol dışarı bu konsol uygulaması örnek:

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