Autor Beitrag
C#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Fr 23.09.11 19:27 
Hallo,

also ich habe im Grunde 2 bzw. 3 Klassen: 1. Server-Klasse, 2. Client-Klasse und 3. Verarbeitungsklasse
jetzt wird von Klasse 3 aus etwas eingegeben (via Console), dann soll der Client die Daten an den Server senden und dieser übergibt dann den Stream als einen string wieder an Klasse 3 weitergeben.
Da alle Klassen in einer Sollution sind, sollte das kein Problem sein, jedoch funktioniert die übergabe von Server zu Verarbeitungsklasse nicht.
Hier die wichtigen Codestellen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
 //Klasse 3 (Verarbeitungsklasse "Launcher")
client.message = com.Remove(08);    //client.message ist die Nachricht die von Klasse 3 an den Clienten übergeben wird.
while (cache.server == old_comCenter_answer)  //com ist für Console.ReadLine() und cache.Server ist meine variable die der Server an die
{}                //3. Klasse übergibt
Console.WriteLine("Server >> " + cache.server);

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
 public class Cache  
    {
        public string client;
        public string server;
    }

Nach 4 verschiedenen Methoden habe ich es jetzt mal mit einer neuen Klasse probiert, was aber auch nicht klappt...#
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
 //Klasse 1 (Server)
 while (loop)
            {  
                    byte[] buffer = new byte[1024];    //Hier wird im Server der Wert wieder eingelsen und in einen string konvertiert
                    stream.Read(buffer, 0, buffer.Length);  //was auch alles klappt, auch das Setzten der Variable cache.client.
                    launcher.cache.client = encoder.GetString(buffer);
               
            }

Aber wenn sich der Wert in meiner Verarbeitungsklasse ändern soll, bleibt er null, obwohl er sich ändern müsste.
Meine Initialisierung der public class cache habe ich im "Launcher" gemacht. In den Anderen greife über
ausblenden C#-Quelltext
1:
2:
Launcher launcher = new Launcher();
launcher.cache.client = *meine Variable* //Wert stimmt auch bei launcher.cache.client!

darauf zu. Was mache ich falsch bzw. wie kann ich das lösen?

WICHTIG!!!
Alle Klassen laufen in parallelen Threads und dürfen nicht abgebrochen werden.

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
daeve
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 116
Erhaltene Danke: 3

Windows (XP Pro, 7 Ultimate x64)
C#,WPF,Java,ASP.Net, VS 2010 Ultimate (x86)
BeitragVerfasst: Sa 24.09.11 00:47 
ich verstehs noch nicht ganz... aber wenn du mehrere Threads parallel laufen hast ist Synchronisierung ev. ein Thema

msdn.microsoft.com/e...ibrary/ms173179.aspx
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4805
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 24.09.11 09:07 
Hallo C#,

dein letzter Code-Ausschnitt verwirrt mich? Verwenden denn alle dieselbe Instanz der Launcher-Klasse?

Aber generell gilt - wie daeve schon geschrieben hat -, bei threadübergreifenden Vorgängen immer, eine passende Synchronisation zu verwenden.
C# Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Sa 24.09.11 18:31 
Ja genau. Aber ich habs jetzt hinbekommen - nur nicht auf die "feine" art xD. habe es jetzt mit nem 2ten Stream gemach auf "127.0.0.1"...

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler