event erzeugen
-
hallo
Ich suche eine Lösung zu folgenden Problem:
Erzeugen eines Events. Das ich von einen Anderen Thread aus starten kann
um im Hauptthread eine Funktion auszuführen.
Sprich:
Ich will beim Empfangen von Daten über die Serielle Schnittstelle (eigener Thread) dem Hauptthread sagen das neue Daten da sind und dort halt
eine Funktion ausführen.ich benutze .Net2005
Gruß Eltman
-
Invoke/BeginInvoke...
-
kannst du mal ein kleines Beispiel dazu machen ?
-
-
das Invoke wird doch von Control aus bedient.
Wenn ich aber kein Control habe.private: System::Void serialPort1_DataReceived(System::Object^ sender, System::IO::Ports::SerialDataReceivedEventArgs^ e)
{
/// hier sollte der Event erzeugt werden
}
-
Wenn Du kein Control hast, dann musst Du Dir eines übergeben...
Wobei... ich frage mich natürlich warum Du überhaupt dies in einem eigenen Thread machst? Der "SerialPort" ist doch eigentlich eine Componente in Deiner UI... und da kannst Du ja direkt auf die anderen UI-Controls via this.Invoke "zugreifen"...
-
ich hab was für C# gefunden
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{// Event for receiving data
// Read the buffer to text box.
this.Invoke(new EventHandler(DoUpdate));
}
private void DoUpdate(object s, EventArgs e)
{
statusBar1.Text = "Getting Data";
}
und so wollte ich das mit C++ machen.
-
private: void port_DataReceived(object sender, SerialDataReceivedEventArgs e) { // Event for receiving data // Read the buffer to text box. array<Object^> ^args = {this, e}; this->Invoke(gcnew EventHandler(this, &Form1::DoUpdate), args); } private: void DoUpdate(Object ^o, EventArgs ^e) { statusBar1->Text = "Getting Data"; }
-
es geht. Genau das habe ich gesucht.
Kannst du mir aber noch bitte die Zeilearray<Object^> ^args = {this, e};
erklären.
Hab noch nicht so viel mit .Net2 gemacht. Hatte nur etwas Erfahrung mit MFC gemacht. Will aber jetzt .Net nehmen
-
Etlman schrieb:
Kannst du mir aber noch bitte die Zeile
array<Object^> ^args = {this, e};
erklären.Es stellt einfach die zwei geforderten Argumente für die Funktion bereit (also dieses wird dann der "DoUpdate" als argumente übergeben.
Ich bezweifle auch, dass der von Dir gepostete C#-Code geht...
-
Besten Dank für die Hilfe
werd mal mein Programm weiterschreiben, da jetzt das Empfangen ja klappt.
Vielleicht werd ich doch auch auf c# umsteigen . Mal sehen.
-
Wenn Du nur .NET machst ist IMHO C# "besser"...