Sto costruendo un'applicazione desktop C#. Come si chiama un metodo che richiede più parametri in un thread. Ho un metodo chiamato Send (stringa arg1, stringa arg2, stringa arg3), ho bisogno di chiamare questo metodo usando un thread chiamato SendingThread. Qualcuno può aiutare con questo? Qualsiasi aiuto sarà molto apprezzato.Come chiamare un metodo che richiede più parametri in una discussione?
risposta
Thread thread = new Thread(() => Send(arg1, arg2, arg3));
thread.Start();
È possibile definire un tipo, che incapsula i parametri che si desidera passare e avviare il thread con un riferimento a un'istanza di questo tipo.
quando giù di voto, si prega di lasciare un commento. Grazie. –
buona risposta, ma per quanto riguarda l'interruzione del thread? –
f00: Non sono sicuro di seguirti qui. Cosa intendi? Non c'è niente di speciale in un thread che viene avviato con un riferimento a un oggetto. –
è possibile definire un oggetto metodo e di supporto intermedio per fare questo:
public void MethodToCallInThread(string param1, string param2)
{
...
}
public void HelperMethod(object helper){
var h = (HelperObject) helper;
MethodToCallInThread(h.param1, h.param2);
}
E poi si inizia il filo con il HelperMethod
, non con MethodToCallInThread
:
var h = new HelperObject { param1 = p1, param2 = p2 }
ThreadPool.QueueUserWorkItem(HelperMethod, h);
Qualcuno può spiegare il -1 ?? –
ho avuto lo stesso :). è una situazione stupida comune ... mi piace il colore rosso, ma ad altri piace il giallo :) e odio tutti i NON-rosso-divertimento. – garik
Sospetto che il -1 sia per l'utilizzo di uno stile antico di parametri di passaggio che è davvero piuttosto ingombrante rispetto al nuovo stile disponibile nelle versioni moderne di C#. –
questo può aiutare. È possibile definire il metodo di invio come segue e quindi utilizzare i parametri.
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...
}
① Questo rimuove inutilmente tutti i tipi di sicurezza.(Inutilmente perché potresti semplicemente passare le stringhe invece di un oggetto.) ② L'uso di 'Array' è davvero strano. Perché non eseguire il cast di 'string []' direttamente? ③ Perché stai allocando un 'nuovo oggetto [3]' e poi lo hai immediatamente obsoleto? È ridondante. ④ Che cos'è 'ReceiveMsgThread'? Non l'hai dichiarato da nessuna parte. ⑤ Cosa fa questa risposta che il mio non fa (oltre a distruggere la sicurezza del tipo)? – Timwi
Come evidenziato da Timwi, questo codice presenta numerosi problemi nonostante sia la risposta accettata. Per favore non usare questo. –
@Timwi: prima di tutto sì invece di ReceiveMsgThread dovrebbe essere SendingThread. Mi dispiace per questo. In secondo luogo, l'ho preso come array perché non è possibile eseguire il cast di un tipo di oggetto su string [] direttamente. Ho passato la stringa [] nei parametri dell'argomento, come faresti a separare le stringhe separate dai parametri dell'oggetto. Devi lanciarlo come array ed estrarre i valori da quell'array gettandolo come stringa. Perché non provi e controlla se è possibile. E anche nei parametri dell'oggetto, possiamo passare string, int, quindi su tipi diversi e quindi estrarre i tipi corrispondenti più tardi. –
- 1. Chiamare un metodo come un metodo di estensione richiede più di riferimento che chiamare direttamente
- 2. Come chiamare un metodo con una discussione separata in Java?
- 3. Come passare più parametri in discussione in VB
- 4. Metodo semplice per chiamare il metodo nella nuova discussione
- 5. Come chiamare un metodo "vararg" con una serie di parametri?
- 6. Come posso chiamare una funzione che richiede 2 parametri con una Tuple2?
- 7. C# parametri in discussione
- 8. Come chiamare un metodo di una classe?
- 9. C# Chiama un metodo in una nuova discussione
- 10. Esecuzione di un metodo con parametri in una discussione in C#
- 11. Impossibile chiamare runOnUiThread in una discussione dall'interno di un servizio
- 12. come chiamare un metodo di più argomenti con ritardo
- 13. Come documentare l'argomento che richiede più tipi
- 14. Chiamare un metodo in una classe in ogni altro metodo
- 15. L'esecuzione di un metodo recuperato da Reflection richiede più tempo?
- 16. Mapper MyBatis per chiamare un PROC con più parametri IN
- 17. In C#, è possibile chiamare un metodo (che ha parametri predefiniti) con "tanti parametri quanti ne ho"?
- 18. È consigliabile chiamare un metodo sovraccarico con parametri null?
- 19. Come creare una discussione?
- 20. Java: Chiamare un metodo eccellente, che chiama un metodo override
- 21. Java: invio di più parametri al metodo
- 22. Termina una discussione che esegue un codice nativo
- 23. Come fermare una discussione?
- 24. Come chiamare un metodo con i parametri di output in PowerShell?
- 25. Come chiamare un metodo statico in C#
- 26. Perchè Scala richiede che il metodo in Predef consenta una stringa come argomento?
- 27. Come si scrive un decoratore per racchiudere qualcosa in un gestore di contesto, che richiede parametri?
- 28. Chiamare il metodo di adattamento più vicino
- 29. In che modo Scala può ricevere più parametri in una definizione di metodo?
- 30. Come interrompere implicitamente una discussione in un oggetto in C#
@ prateeksaluja20: Ho modificato questa risposta per usare il nome del tuo metodo. È più chiaro? – Timwi
mi sembra buono, in alternativa puoi avvolgere l'intera funzionalità di sendthread nella sua classe http://paste.pocoo.org/show/256213/ –
@ f00 perché impiegare tempo e sforzi per creare una classe di chiusura quando il compilatore lo fa per te? – Will