Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [c#]Passare parametri a un thread
Forum - C# / VB.NET - [c#]Passare parametri a un thread

Avatar
Valcars92 (Normal User)
Newbie


Messaggi: 20
Iscritto: 17/07/2021

Segnala al moderatore
Postato alle 13:17
Venerdì, 23/07/2021
Salve a tutti e buongiorno... come da titolo vorrei sapere come faccio a passare un parametro a un thread in pratica mettiamo caso che io ho un codice in questo modo

Program.cs
Codice sorgente - presumibilmente C++

  1. using System;
  2. using System.Threading;
  3.  
  4. namespace ConsoleApp2
  5. {
  6.     class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             Class1 classe = new Class1();
  11.  
  12.             Thread t = new Thread(new ThreadStart(classe.provaClasse));
  13.             t.Start("prova");
  14.  
  15.             Console.WriteLine("Hello World!");
  16.         }
  17.     }
  18. }



Class1.cs
Codice sorgente - presumibilmente C++

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5. namespace ConsoleApp2
  6. {
  7.     class Class1
  8.     {
  9.         public void provaClasse(string testo)
  10.         {
  11.             Console.WriteLine(testo);
  12.         }
  13.     }
  14. }



mi da errore ma ho letto su internet che per passare dati al thread bisogna fare così.... qualcuno può spiegarmi un pò meglio come fare che non riesco a risolvere o meglio vorrei capire cosa sbaglio.... grazie in anticipo e scusatemi per il disturbo

Ultima modifica effettuata da Valcars92 il 23/07/2021 alle 13:27
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2094
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 17:49
Venerdì, 23/07/2021
Devi usare il ParametrizedThread.

esistono diversi modi per farlo, Membri anonimi o tramite task.

esempio di membri anonimi

Codice sorgente - presumibilmente C#

  1. string valore = "ciao";
  2. int numero = 10;
  3.  
  4.  
  5. Thread t = new Thread(new ParameterizedThreadStart(prova));    
  6.     ActionThread.Start(new { valore, numero});
  7.  
  8.  
  9.  
  10.  
  11. void prova(object param)
  12. {
  13.    dynamic p = param;
  14.  
  15.   Console.WriteLine(p.valore + " " + p.numero);
  16.  
  17. }



oppure tramite il task

Codice sorgente - presumibilmente C# / VB.NET

  1. new Thread(() => { /* metodo a cui chiamare e inviare parametri*/ }).Start();




Altro modo e come il tuo, ma semplicemente lo hai dichiarato come Thread normale e non come un thread parametrizzato.

ti bastava aggiungere new ParameterizedThreadStart


Codice sorgente - presumibilmente C# / VB.NET

  1. Class1 classe = new Class1();
  2.  
  3.             Thread t = new Thread(new ParameterizedThreadStart(classe.provaClasse));
  4.             t.Start("prova");



PM Quote
Avatar
Valcars92 (Normal User)
Newbie


Messaggi: 20
Iscritto: 17/07/2021

Segnala al moderatore
Postato alle 18:45
Venerdì, 23/07/2021
Grazie mille thejuster ora mi è tutto piu chiaro ^_^

PM Quote