C# Desktop uygulaması yapıyorum. Bir iş parçacığında birden çok parametre alan bir yöntemi nasıl ararım. Send (String arg1, string arg2, string arg3) adlı bir yöntemim var, bu yöntemi SendingThread adlı bir thread kullanarak çağırmam gerekiyor. Bu konuda herkes yardımcı olabilir mi? Herhangi bir yardım çok takdir edilecektir.Bir iş parçacığında birden çok parametre alan bir yöntem nasıl çağrılır?
cevap
Thread thread = new Thread(() => Send(arg1, arg2, arg3));
thread.Start();
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:
oylama aşağı, bir yorum bırakın lütfen. Teşekkürler. –
iyi cevap ama bahsi geçen iş parçacığı iptal ne hakkında? –
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. –
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);
Birisi lütfen -1'i açıklayabilir mi? –
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
-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. –
. 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...
}
① 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
Timwi'nin de belirttiği gibi, bu kod kabul edilen cevap olmasına rağmen çok sayıda soruna sahiptir. Lütfen bunu kullanma. –
@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ı @ –
- 1. Birden çok iş parçacığında bir MemoryStream akışını okuma
- 2. Bir STA iş parçacığında birden çok tanıtıcı için WaitAll desteklenmiyor
- 3. C# Yeni bir iş parçacığında bir yöntem çağırın
- 4. android onServiceConnected() ayrı bir iş parçacığında mı çağrılır?
- 5. Ayrı bir iş parçacığında
- 6. V8'i bir iş parçacığında nasıl kullanırım?
- 7. Yeni bir iş parçacığında nasıl hizmet başlatabilirim?
- 8. Sadece bir iş parçacığında çalışan birkaç 'iş parçacığı' nasıl işlenir
- 9. jQuery Doğrulama eklentisi özel yöntem. Birden çok parametre
- 10. pdb başka bir iş parçacığında kırılamıyor?
- 11. Laravel Bir kerede birden çok İş Ekleme
- 12. Qt5: Bir iş parçacığında nasıl bir sinyal beklemeli?
- 13. Bir adaptörden bir ListFragment içinde tanımlanan bir yöntem nasıl çağrılır?
- 14. SensorEventListener ayrı iş parçacığında
- 15. Bir iş parçacığında THTTPReqResp bileşenini yok edemiyor
- 16. Futures tek bir iş parçacığında mı yürütülüyor? (Scala)
- 17. İşleme sonrası yöntem nasıl çağrılır?
- 18. Powershell: Birden çok parametre kümesi
- 19. PHPUnit: Birden çok yöntem çağrısıyla birden çok yöntem çağrısı nasıl yapılır?
- 20. ExcelWB'de bir modülden buWorkbook'ta nasıl bir yöntem çağrılır?
- 21. Başka bir yöntemden yöntem için bir işaretçi nasıl çağrılır?
- 22. Satır Filtresinde birden çok parametre
- 23. C# Birden fazla parametreyle nasıl çağrılır?
- 24. options_from_collection_for_select için birden çok alan nasıl alınır
- 25. Başka bir iş parçacığında bir WPF İlerleme Penceresi Oluşturun
- 26. Birden çok iş parçacığı ile tek bir dosyada nasıl yazılır?
- 27. Visual Studio'da yalnızca bir iş parçacığında hata ayıklama
- 28. QGraphicsItem seçildiğinde hangi yöntem çağrılır
- 29. Çoklu iş parçacığında TargetInvocationException'dan incelikle nasıl kurtarılır?
- 30. Diğer iş parçacığında istisna nasıl hata ayıklanır?
@ prateeksaluja20: Metodunuzun adını kullanmak için bu cevabı düzenledim. Bu daha net mi? – Timwi
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/ –
@ bütün sendthread işlevselliği sarabilirdiniz, bana güzel görünüyor senin için yapar mı – Will