Hallo Forumgemeinschaft,
ich arbeite momentan an einer GPS Anwendung für Windows Mobile 6 Handys und bin dabei auf ein kleines Problem gestoßen.
Ich rufe die Daten meines GPS Senders ganz normal, wie auch im MSDN beschrieben, über den COM-Port ab und kann diese in die Console ausgeben. Wenn ich nun allerdings die Daten in ein Textfeld in meiner Anwednung ausgeben möchte oder den String bearbeite um damit arbeiten zu können, bekomme ich einen Fehler.
Das Problem habe ich mittels des Forums schon erkannt und auf die unterschiedlichen Threads zurückgeführt. Ich hatte mir mehrere Sachen angeschaut und würde vermuten das mein Ansatz eigentlich gehen müsste, dem ist aber scheinbar nicht so. Das Problem ist auch, dass es soviele verschiedene Lösungen gibt mit Invoke zu arbeiten und ich eventuell durch die nutzung vom CompactFramework 3.5 gewisse Einschränkungen habe.
Hier mal der Code:
Ich wäre euch dankbar wenn mir jemand sagen könnte was ich falsch mache.
Ich bin nicht an das Abfragen der Ports gebunden, falls also jemand ein anderes Beispiel liefert, bin ich dafür offen. Wichtig ist mir nur, dass ich aus den abgefragten GPS Daten später Geschwindigkeit, zurückgelegte Entfernung, Zeit und natürlich die Position selbst berechnen kann.
Über das "wie", habe ich mir noch nicht so die gedanken gemacht aber eins nach dem anderen
ich arbeite momentan an einer GPS Anwendung für Windows Mobile 6 Handys und bin dabei auf ein kleines Problem gestoßen.
Ich rufe die Daten meines GPS Senders ganz normal, wie auch im MSDN beschrieben, über den COM-Port ab und kann diese in die Console ausgeben. Wenn ich nun allerdings die Daten in ein Textfeld in meiner Anwednung ausgeben möchte oder den String bearbeite um damit arbeiten zu können, bekomme ich einen Fehler.
Das Problem habe ich mittels des Forums schon erkannt und auf die unterschiedlichen Threads zurückgeführt. Ich hatte mir mehrere Sachen angeschaut und würde vermuten das mein Ansatz eigentlich gehen müsste, dem ist aber scheinbar nicht so. Das Problem ist auch, dass es soviele verschiedene Lösungen gibt mit Invoke zu arbeiten und ich eventuell durch die nutzung vom CompactFramework 3.5 gewisse Einschränkungen habe.
Hier mal der Code:
Code:
using System; using System.Linq; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.IO.Ports; using System.Threading; using System.Windows.Forms; namespace SmartDeviceProject3 { public partial class gps2bla : Form { static SerialPort _serialPort; static bool _continue = true; public gps2bla() { InitializeComponent(); } private void button1_Click_1(object sender, EventArgs e) { InitializeComport(); } public void InitializeComport() // Quelle: MSDN { string name; string message; StringComparer stringComparer = StringComparer.OrdinalIgnoreCase; Thread readThread = new Thread(Read); // Create a new SerialPort object with default settings. _serialPort = new SerialPort(); // Allow the user to set the appropriate properties. _serialPort.PortName = "COM1"; _serialPort.BaudRate = 38400; _serialPort.Parity = Parity.None; _serialPort.DataBits = 8; _serialPort.StopBits = StopBits.One; _serialPort.Handshake = Handshake.None; // Set the read/write timeouts _serialPort.ReadTimeout = 500; _serialPort.WriteTimeout = 500; _serialPort.Open(); _continue = true; readThread.Start(); Console.Write("Name: "); name = Console.ReadLine(); Console.WriteLine("Type QUIT to exit"); while (_continue) { message = Console.ReadLine(); if (stringComparer.Equals("quit", message)) { _continue = false; } else { _serialPort.WriteLine( String.Format("<{0}>: {1}", name, message)); } } readThread.Join(); _serialPort.Close(); } public void Read() // Bis auf boxchange aufruf wie MSDN Beispiel { while (_continue) { try { string message = _serialPort.ReadLine(); //Console.WriteLine(message); boxchange(message); } catch (TimeoutException ex) { //Console.WriteLine("TimeoutException", ex.Message); } } } public void boxchange(object message) // Beispielmethode, hier sollen später die GPS Daten in Geschwindigkeit, Strecke usw. umgerechnet werden { Console.WriteLine(message); if (this.InvokeRequired) { this.textBox1.BeginInvoke(new WaitCallback(boxchange), message); return; } else { this.textBox1.Text = (string)message; } }
Ich bin nicht an das Abfragen der Ports gebunden, falls also jemand ein anderes Beispiel liefert, bin ich dafür offen. Wichtig ist mir nur, dass ich aus den abgefragten GPS Daten später Geschwindigkeit, zurückgelegte Entfernung, Zeit und natürlich die Position selbst berechnen kann.
Über das "wie", habe ich mir noch nicht so die gedanken gemacht aber eins nach dem anderen
Comment