Forum: PC-Programmierung Verständnisproblem VB.NET


von Jens P. (picler)


Lesenswert?

Hallo allerseits,

ich habe das Problem, mich in die Funktionsweise von Visual Basic 2008 
Express hineinzuversetzen und suche jemanden, der mir ein paar Schritte 
in die richtige Richtung zeigt. Vielleicht habe ich auch nur eine 
Denkblockade...

Bisher habe ich hauptsächlich in Assembler (Mikrocontroller) und ein 
paar einfachen Basic-Dialekten programmiert und beherrsche das 
eigentlich auch ganz gut. Für ein aktuelles Projekt will ich Daten vom 
uC via RS232 auf den PC übertragen und dort auswerten. Die Wahl fiel aus 
verschiedenen Gründen auf VB2008, nicht zuletzt, weil es sehr einfach zu 
programmieren sein soll.
Für den Einstieg habe ich mir zwei Bücher reingezogen und auch die 
Beispiele auf der mitgelieferten CD mal ausprobiert. Das hat soweit auch 
funktioniert. Jedoch stolpere ich immer wieder über Ereignisse, 
Multithreading und die Funktionsweise von VB allgemein. Bisher war ich 
es gewohnt, dass ein Programm sequentiell abgearbeitet wird und wenn 
gerade nichts zu tun war, dann lief das Programm in einer 
Endlosschleife. Sowas habe ich in VB nicht gefunden. Ich kann zwar auf 
Ereignisse reagieren, wenn ein Button angeklickt wurde oder die serielle 
Schnittstelle ein Zeichen empfängt. Soweit habe ich das auch verstanden. 
Doch wie lasse ich das "normale" Programm (main) ablaufen? Weiterhin ist 
für mich unverständlich, wieso eine Reaktion auf ein Button-Ereignis, 
z.B. Ausgabe in einer Listbox, klappt, die selbe Ausgabe auf ein 
DataReceived Event aber einen Fehler meldet, da es sich um einen anderen 
Thread handeln würde. Woher weiß ich, wann welcher Thread aktiv ist und 
wie kann ich das verhindern?

Das sind erstmal genug Probleme und ich würde mich freuen, wenn mir hier 
jemand etwas unter die Arme greifen würde. Danke schon mal.

von Man1 (Gast)


Lesenswert?

Interessant mir geht es genau entgegengesetzt Hochsprachen behersche ich 
wie aus dem FF. Versuche nun gerade mich mit uC auseinanderesetzen und 
muss mich daran gewöhnen nicht mehr in Threads, Events, ansynchronen 
Funktionsaufrufen, ... etc. zu denken :-)

> Bisher war ich
> es gewohnt, dass ein Programm sequentiell abgearbeitet wird und wenn
> gerade nichts zu tun war, dann lief das Programm in einer
> Endlosschleife.

Im Grunde könntest du wenn du in VB.NET auch so weiterprogrammieren nur 
wäre nicht besonder klug. Dein Programm würde duch die Endlosschleife 
die CPU permanent arbeiten lassen obwohl es nichts zu tun gibt. Deswegen 
reagiert man auf Ereignisse und führt dann die Arbeit aus oder startet 
einen Thread dafür.

> Doch wie lasse ich das "normale" Programm (main) ablaufen?
Das läuft permanent im Hintergrund und wartet eben auf die Ereignisse 
und führt dann entsprechend wie du es programmiert hast Funktionen aus 
wenn diese eintreten.

> Weiterhin ist
> für mich unverständlich, wieso eine Reaktion auf ein Button-Ereignis,
> z.B. Ausgabe in einer Listbox, klappt, die selbe Ausgabe auf ein
> DataReceived Event aber einen Fehler meldet, da es sich um einen anderen
> Thread handeln würde.

Das liegt daran das für die Funktion die bei einem DataReceive Event 
ausgeführt wird ein separater Thread unsichtbar vor dir versteckt von VB 
gestartet wird um das Empfangen von Daten von der Oberfläche zu 
entkoppeln.
Sonst würde z.B. eine Animation die auf der GUI läuft jedesmal stocken 
wenn deine Funktion irgendwas mit den Daten macht.

Lösung: http://msdn.microsoft.com/en-us/library/ms171728.aspx

Jens A: schrieb:
> Woher weiß ich, wann welcher Thread aktiv ist und
> wie kann ich das verhindern?

Außer in einigen Sonderfällen wie Datereceive wird kein Thread 
automatisch erzeugt und es funktioniert wie bei dem Button. Außer du 
startest selber einen Thread der irgendwas tun soll.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.