2010-08-30 12 views

cevap

23
Thread thread = new Thread(() => Send(arg1, arg2, arg3)); 
thread.Start(); 
+0

@ prateeksaluja20: Metodunuzun adını kullanmak için bu cevabı düzenledim. Bu daha net mi? – Timwi

+0

alternatif zaman derleyici kapatma sınıfı oluşturmak için zaman ve çaba almak neden f00 başlıbaşına sınıfında http://paste.pocoo.org/show/256213/ –

+0

@ bütün sendthread işlevselliği sarabilirdiniz, bana güzel görünüyor senin için yapar mı – Will

2

Geçirmek istediğiniz parametreleri kapsülleyen ve iş parçacığı bu tür bir örneğe başvuruyla başlatan bir tür tanımlayabilirsiniz.

public void MethodToCallInThread(string param1, string param2) 
{ 
    ... 
} 
public void HelperMethod(object helper){ 
    var h = (HelperObject) helper; 
    MethodToCallInThread(h.param1, h.param2); 
} 

Ve sonra MethodToCallInThread ile değil, HelperMethod ile iplik başlamak:

+0

oylama aşağı, bir yorum bırakın lütfen. Teşekkürler. –

+0

iyi cevap ama bahsi geçen iş parçacığı iptal ne hakkında? –

+0

f00: Seni burada takip ettiğimden emin değilim. Ne demek istiyorsun? Bir nesneye referansla başlayan bir iş parçacığı hakkında özel bir şey yoktur. –

1

Bunu yapmak için bir ara yöntem ve yardımcı nesnesi tanımlayabilir bu yardımcı olabilir

var h = new HelperObject { param1 = p1, param2 = p2 } 
ThreadPool.QueueUserWorkItem(HelperMethod, h); 
+0

Birisi lütfen -1'i açıklayabilir mi? –

+0

Bende aynı var :). Bu yaygın aptal durumdur ... kırmızı rengi severim ama diğeri sarıdan hoşlanır :) ve tüm kırmızı olmayan eğlencelerden nefret ediyorum. – garik

+0

-1'in, C# modern sürümlerinde bulunan yeni stile kıyasla gerçekten oldukça hantal olan eski bir geçiş parametresi kullanmaktan şüpheleniyorum. –

-1

. Gönderme yönteminizi aşağıdaki gibi tanımlayabilir ve daha sonra parametreleri kullanabilirsiniz.

string[] parameters = new string[3]; 
parameters[0] = arg1; 
parameters[1] = arg2; 
parameters[1] = arg3; 

System.Threading.Thread SendingThread = new System.Threading.Thread(Send); 
SendingThread.Start(parameters); 


public void Send(object parameters) 
{ 
    Array arrayParameters = new object[3]; 
    arrayParameters = (Array)parameters; 
    string str1 = (string)arrayParameters.GetValue(0); 
    string str2 = (string)arrayParameters.GetValue(1); 
    string str3 = (string)arrayParameters.GetValue(2); 

    ///Following code here... 
} 
+2

① Bu, tüm tip güvenliğini gereksiz yere ortadan kaldırır.(Gereksiz yere, bir nesnenin yerine dizeleri geçebildiğiniz için gereksiz yere.) 'Array'ı kullanmak gerçekten garip. Neden "string []' a doğrudan aktarılmıyorsunuz? 'Neden yeni bir nesne (3) ayıracaksınız ve hemen tekrar eski mi yapıyorsunuz? Bu gereksiz. Rece ReceiveMsgThread' nedir? Bunu hiçbir yerde beyan etmedin. This Bu cevap benim için ne yapar (tip güvenliğini bozmak dışında)? – Timwi

+2

Timwi'nin de belirttiği gibi, bu kod kabul edilen cevap olmasına rağmen çok sayıda soruna sahiptir. Lütfen bunu kullanma. –

+0

@Timwi: 1. tüm evet yerine ReceiveMsgThread ait o SendingThread olmalıdır. Bunun için üzgünüm. İkincisi, onu bir dizi olarak aldım çünkü bir nesne türünü doğrudan [] dizisine atayamazsınız. Argüman parametrelerinde string [] 'yi geçmiştim, nesne parametrelerinden ayrı dizeleri nasıl çıkarırsınız. Bir dizi olarak yayınlamanız ve bu diziden değerleri dizge olarak çıkarmanız gerekir. Neden sadece bir deneme yapmıyorsunuz ve mümkün olup olmadığını kontrol etmiyorsunuz. Ve ayrıca nesne parametreleri, çok farklı türleri üzerinde, dize, int geçebilir ve daha sonra karşılık gelen türlerini ayıklamak. sumit-programcı @ –

İlgili konular