2016-04-10 3 views
3

Ich frage mich, wie ich eine Variable von einem Thread zu einem anderen in einer C# -Konsolenanwendung senden kann. Zum BeispielÜbergabe von Variablen zwischen 2 Threads in einer C# -Konsolenanwendung (Neuling hier)

using System; 
using System.Threading; 

namespace example 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int examplevariable = Convert.ToInt32(Console.ReadLine()); 
      Thread t = new Thread(secondthread); 
      t.Start(); 

     } 

    static void secondthread() 
    { 
     Console.WriteLine(+examplevariable); 
    } 
} 
} 

Ich möchte "secondthread" erkennen "examplevariable".

Antwort

3

Es gibt eine Überlastung zu Thread.Start(), die einen Parameter als Objekt nimmt. Sie können Ihre Hauptthread Variable auf das und werfen Sie es als Variablentyp

using System; 
    using System.Threading; 

    namespace ConsoleApplication1 
    { 
     class Program 
     { 
      static void Main(string[] args) 
      { 
       int examplevariable = Convert.ToInt32(Console.ReadLine()); 
       Thread t = new Thread(secondthread); 
       t.Start(examplevariable); 
      } 

      static void secondthread(object obj) 
      { 
       int examplevariable = (int) obj; 
       Console.WriteLine(examplevariable); 
       Console.Read(); 
      } 

     } 
    } 

wenn Sie wollen mehrere Variable übergeben dann verwenden, um eine Modellklasse und verwenden Eigenschaft verbindlich wie unten

using System; 
using System.Threading; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      TestModel tm = new TestModel(); 
      tm.examplevariable1 = Convert.ToInt32(Console.ReadLine()); 
      tm.examplevariable2 = Console.ReadLine(); 
      Thread t = new Thread(secondthread); 
      t.Start(tm); 
     } 

     static void secondthread(object obj) 
     { 
      TestModel newTm = (TestModel) obj; 
      Console.WriteLine(newTm.examplevariable1); 
      Console.WriteLine(newTm.examplevariable2); 
      Console.Read(); 
     } 

    } 

    class TestModel 
    { 
     public int examplevariable1 { get; set; } 
     public string examplevariable2 { get; set; } 

    } 
} 

Hope this passieren wird helfen

+0

Dies scheint zu funktionieren, aber kann ich mehrere Variablen übertragen mit so etwas tun? – LonelyPyxel

+0

Ja, Sie können nur Array von Variablen statt einer einzelnen Variablen übergeben wie 'int [] ar = new [] {1, 2, 3}; t.Start (ar); 'und cast ist wie' array int [] examplevariable = (int []) obj; Console.WriteLine (examplevariable [2]); 'auf diese Weise kann mehrere Variablen übergeben – Mostafiz

+0

Siehe mein letztes Update der Antwort, auf diese Weise können Sie auch mehrere Variablen übergeben – Mostafiz

1

Eine einfache Möglichkeit, dies zu tun, aber möglicherweise nicht in allen Szenarien funktioniert, wäre eine statische Variable für die Klasse zu definieren und den Wert von der Konsole eingelesen der statischen Variable zuweisen. Wie so:

class Program 
{ 

    static int examplevariable; 

    static void Main(string[] args) 
    { 
     examplevariable = Convert.ToInt32(Console.ReadLine()); 
     Thread t = new Thread(secondthread); 
     t.Start(); 

    } 

    static void secondthread() 
    { 
     Console.WriteLine(+examplevariable); 
    } 

Auch sieht diese Frage auf, wie Parameter zu einem Thema passieren:

ThreadStart with parameters

Verwandte Themen