Benutzer mit den meisten Antworten
Übertragen von statischen Variablen

Frage
-
Morgen Leute, ich habe ein Problem und zwar habe ich in meiner C# WPF Projektmappe zwei Projekte. In einem Projekt bekomme ich Koordinaten aus der Hardware ausgelesen die ich in meinem Projekt benötige. Ich initialisiere meine variablen mit = 0 und der übertragene Wert ist auch 0. Wenn ich mit anderen Werten initialisiere bekomme ich auch diese übertragen. Allerdings werden in diesen Variablen die Koordinaten gespeichert die auch richtig in der Console ausgegeben werden. Ich bekomme aber nur die Werte übertragen mit dem ich die variablen initialisiert habe. Hier mal mein code.
public class Program { static void Main(string[] args) { DeviceConfiguration DeviceConfiguration = new DeviceConfiguration(); DeviceConfiguration.ServiceUrl = "http://.........../"; Device Device = new Device(DeviceConfiguration); Device.StartThread(true); Device.NewDataAvailableEvent += Device_NewDataAvailableEvent; Console.ReadKey(); } private static double lastPosX = 0; private static double lastPosY = 0; private static double lastPosZ = 0; private static void Device_NewDataAvailableEvent(Position.SignedPositions signedPositions) { try { if (signedPositions.Positions != null) { if (signedPositions.Positions.Count() > 1) { lastPosX = signedPositions.Positions[1].X; lastPosY = signedPositions.Positions[1].Y; lastPosZ = signedPositions.Positions[1].Z; Console.WriteLine(signedPositions.Positions[1].ChannelIndex + " " + lastPosX + " " + lastPosY + " " + lastPosZ); } } } catch (Exception) { } } public static Point3D getpositionData() { Point3D returnPoint = new Point3D(-9999,-9999,-9999); returnPoint.X = lastPosX; returnPoint.Y = lastPosY; returnPoint.Z = lastPosZ; return returnPoint; } }
In meinem Projekt habe ich den Namespace bei den header hinzugefügt und rufe wie folgt die getpositionData Methode auf.
private void Position() { Point3D coordinates = Program.getpositionData(); try { if (!Dispatcher.CheckAccess()) { textBox21.Dispatcher.BeginInvoke(new Action(() => PositionSar())); textBox22.Dispatcher.BeginInvoke(new Action(() => PositionSar())); textBox23.Dispatcher.BeginInvoke(new Action(() => PositionSar())); } else { textBox21.Text = coordinates.X.ToString(); textBox22.Text = coordinates.Y.ToString(); textBox23.Text = coordinates.Z.ToString(); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
Ich bekomme leider nur die 3 initialisierten nullen bei mir in der Oberfläche angezeigt. Jemand eine idee oder einen ansatz??
Antworten
-
Hallo,
für mich schaut es so aus, dass dein "Ausleseprogramm" als eigene Programm Instanz läuft. Dein WPF Programm greift dann auf zwar auf den Code, aber nicht auf die Daten zurück. Faktisch hast du zwei unterschiedliche Instanzen deiner Daten, wobei die im WPF Projekt nie mit neuen Daten versorgt wird, deswegen die initialisierten (0).
Sinnvollerweise baust Du dein Ausleseprogramm in eine Bibliothek um, wobei Du dabei auf die "static" Angaben sowie main - daraus würde der Konstruktor - verzichten und anstatt dessen eine Klasse erstellen solltest. Diese Klasse kannst du in dein WPF Projekt über die Bibliothek einbinden.
Anstatt einem einzigen Satz von Skalar Variable schiebe die Daten in einer Auflistung, z. B. eine ObservableCollection<Point3> oder, um es threadsicher zu bekommen, eine BlockingCollection<T>. Damit verhinderst du nebenbei Datenverlust und Threading-Probleme.
Gruß Elmar
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Montag, 9. Juli 2018 05:27
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Montag, 16. Juli 2018 09:14
-
Ich bekomme leider nur die 3 initialisierten nullen bei mir in der
Oberfläche angezeigt. Jemand eine idee oder einen ansatz??
So ein Glück, dein Programm arbeitet richtig!
Vielleicht hast Du aber auch einen entscheidenden Teil in deiner Beschreibung vergessen, nämlich den, der beschreibt wie die Schnittstelle zwischen dem vorhandenem Projekt und deinem Projekt ausschaut.
- Gruß Florian
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Montag, 9. Juli 2018 05:27
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Montag, 16. Juli 2018 09:14
Alle Antworten
-
Hi,
werden die Variablen denn überhaupt mit den neuen Werten versehen?
Setz doch mal einen Breakpoint auf die erste Zeile in der Methode "Device_NewDataAvailableEvent" und geh dann Schritt für Schritt durch.
Insbesondere den leeren catch Block solltest Du aber mal mit sinnvollem Code bestücken und schauen, was dort passiert.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport -
Hallo,
für mich schaut es so aus, dass dein "Ausleseprogramm" als eigene Programm Instanz läuft. Dein WPF Programm greift dann auf zwar auf den Code, aber nicht auf die Daten zurück. Faktisch hast du zwei unterschiedliche Instanzen deiner Daten, wobei die im WPF Projekt nie mit neuen Daten versorgt wird, deswegen die initialisierten (0).
Sinnvollerweise baust Du dein Ausleseprogramm in eine Bibliothek um, wobei Du dabei auf die "static" Angaben sowie main - daraus würde der Konstruktor - verzichten und anstatt dessen eine Klasse erstellen solltest. Diese Klasse kannst du in dein WPF Projekt über die Bibliothek einbinden.
Anstatt einem einzigen Satz von Skalar Variable schiebe die Daten in einer Auflistung, z. B. eine ObservableCollection<Point3> oder, um es threadsicher zu bekommen, eine BlockingCollection<T>. Damit verhinderst du nebenbei Datenverlust und Threading-Probleme.
Gruß Elmar
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Montag, 9. Juli 2018 05:27
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Montag, 16. Juli 2018 09:14
-
Ich bekomme leider nur die 3 initialisierten nullen bei mir in der
Oberfläche angezeigt. Jemand eine idee oder einen ansatz??
So ein Glück, dein Programm arbeitet richtig!
Vielleicht hast Du aber auch einen entscheidenden Teil in deiner Beschreibung vergessen, nämlich den, der beschreibt wie die Schnittstelle zwischen dem vorhandenem Projekt und deinem Projekt ausschaut.
- Gruß Florian
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Montag, 9. Juli 2018 05:27
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Montag, 16. Juli 2018 09:14