2013-08-03 27 views
10

Tôi có hàm GetPivotedDataTable (dữ liệu, "ngày", "id", "cờ") đang trả về dữ liệu theo định dạng được Pivoted. Tôi muốn gọi phương thức này bằng cách sử dụng Task nhưng cách chuyển nhiều tham số trong Task.Cách chuyển nhiều thông số trong Tác vụ

Trả lời

28

Bạn có thể sử dụng biểu thức lambda, hoặc một Func để vượt qua các thông số :)

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

rất nhiều nhờ ... –

+2

Mặc dù đồng hồ cho việc thay đổi các biến (chẳng hạn như bắt đầu từ nhiều nhiệm vụ với id riêng) - sau đó bạn phải tạo một bản sao cục bộ của biến: http://stackoverflow.com/questions/10179691/passing-arguments-with-changing-values-to-task-behaviour#10179856. – SharpC

0

Bạn có thể tạo một lớp trợ giúp sẽ giữ tất cả các thông số bạn cần trong công việc của mình.

2

Trong trường hợp đó các thông số của bạn là các loại khác nhau bạn có thể sử dụng một loạt các đối tượng và sau đó định kiểu trở lại các loại gốc.

Kiểm tra giao diện điều khiển ứng dụng này ví dụ:

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(); 
    } 
Các vấn đề liên quan