2010-07-20 21 views
8

Tiêu đề khá nhiều nói nó. Tôi có một số phương thức cần chạy trên một luồng mới và vì tất cả các mã trước khi tạo chuỗi khá giống nhau, tôi nghĩ tôi sẽ tạo một hàm có thể lấy làm tham số mà Hành động tôi cần gọi.Cách tạo Chủ đề mới để thực hiện một hành động <T>

Vấn đề là, tôi đã không tìm thấy cách cho biết chuỗi cần thực hiện Hành động. Điều đó thậm chí có thể? Đây là một mã mẫu nhỏ của những gì tôi đang cố gắng làm.

private void ExecuteInBiggerStackThread(Action<Helper> action, Parameters parms) 
{ 
    ParameterizedThreadStart operation = new ParameterizedThreadStart(action);// here's the mess 
    Thread bigStackThread = new Thread(operation, 1024 * 1024); 

    bigStackThread.Start(parms); 
    bigStackThread.Join(); 
} 

Kính trọng,
Seba

+0

Ngăn xếp không lớn hơn. Nó thực sự nhỏ hơn trên x64. –

+0

Mã đó chạy trên IIS 7 :) – sebagomez

Trả lời

7

Something như thế này nên làm các trick:

private void ExecuteInBiggerStackThread(Action<Helper> action, Helper h) 
{ 
    var operation = new ParameterizedThreadStart(obj => action((Helper)obj)); 
    Thread bigStackThread = new Thread(operation, 1024 * 1024); 

    bigStackThread.Start(h); 
    bigStackThread.Join(); 
} 
0

Hãy thử sử dụng Action<object> và sau đó đúc để Helper trong cơ thể của hành động

8

tôi wouldn thậm chí không bận tâm với ParameterizedThreadStart. Hãy trình biên dịch làm việc dơ bẩn:

private void ExecuteInBiggerStackThread(Action<Helper> action, Helper h) 
{ 
    Thread bigStackThread = new Thread(() => action(h), 1024 * 1024); 

    bigStackThread.Start(); 
    bigStackThread.Join(); 
} 

Tất nhiên, bạn có thể thực hiện điều này một bước xa hơn và thay đổi chữ ký:

private void ExecuteInBiggerStackThread(Action action) { ... } 
3

Hoặc một phiên bản chung chung hơn của phương pháp này ....

protected void ExecuteInBiggerStackThread<T>(Action<T> action, T parameterObject) 
{ 
    var bigStackThread = new Thread(() => action(parameterObject), 1024 * 1024); 
    bigStackThread.Start(); 
    bigStackThread.Join(); 
} 
Các vấn đề liên quan