2013-08-03 8 views

ответ

28

Вы можете использовать лямбда-выражения, или Func передать параметры :)

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

так много спасибо ... –

+2

Хотя часы для изменения переменных (например, начиная с нескольких задач с отдельными идентификаторами) - затем вы должны сделать локальную копию переменная: http://stackoverflow.com/questions/10179691/passing-arguments-with-changing-values-to-task-behaviour#10179856. – SharpC

0

Вы можете создать класс помощника, который будет содержать все параметры, которые вам нужны в вашей задаче.

2

В случае, если ваши параметры имеют Diferent типов вы можете использовать массив объекта, а затем типаж обратно к оригинальным типам.

Заканчивать это консольное приложение, например:

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(); 
    } 
Смежные вопросы