2010-07-20 9 views
8

Başlık oldukça fazla diyor. Yeni bir iş parçacığı üzerinde çalışması gereken bazı yöntemlere sahibim ve iş parçacığı oluşturmadan önce tüm kodlar hemen hemen aynı olduğundan, çağırmak istediğim Action parametresini alabilecek bir işlev oluşturacağımı düşündüm.Bir eylemi yürütmek için yeni bir Konu oluşturma <T>

Sorun şu ki, bu Eylemi yürütmek için gereken iş parçacığı nasıl anlatacağımı bulamadım. Bu mümkün mü? İşte yapmaya çalıştığım şeyin küçük bir örnek kodu.

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

Yığın daha büyük değil. Aslında x64 üzerinde daha küçüktür. –

+0

Bu kod, IIS 7'de çalışır :) – sebagomez

cevap

7

Something dökme ParameterizedThreadStart ile bile rahatsız.

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

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

Tabii ki, bu bir adım daha ileri taşımak olabilir ve imza değiştirin:: derleyici kirli işler yapalım

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

hile yapmak gerektiğini Action<object> kullanmayı deneyin ve sonra böyle Eylem vücudunda Helper için

8

ben olacak:

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

Selamlar,
seba

3

Veya yöntemin daha genel bir sürümü ....

protected void ExecuteInBiggerStackThread<T>(Action<T> action, T parameterObject) 
{ 
    var bigStackThread = new Thread(() => action(parameterObject), 1024 * 1024); 
    bigStackThread.Start(); 
    bigStackThread.Join(); 
} 
İlgili konular