Es ist ein uraltes Thema, aber es will einfach noch nicht zu allen durchdringen: Wer in seinen VB.Net Codes sowas schreibt
ohne dabei vorher
Wie RodFromGermany in seinem Thread zum korrekten Erstellen einer Formularinstanz bereits schrieb:
Vielleicht liegt es an Gedanken wie: »Ich hab das immer schon so gemacht.«, »Das hab ich so bei youtube gesehen.« oder »Was habt Ihr denn? Läuft doch bisher.« (Ich erhebe keinen Anspruch auf Vollständigkeit
)
Die Profis wissen es, aber hier nochmal klar ausgedrückt: Wer wie oben ohne Deklaration und korrekte Initialisierung solche Codezeilen wie
1. ist es Nonsens, da
2. ist in jener Zeile

Man greift also auf eine mehr oder weniger ominöse Klasseneingeschaft zu. Warum ominös? Weil erst mit folgendem Wissen klar wird, was man sich damit antut:
Anders ausgedrückt: Wer mit Threads arbeitet, hat in Thread 1 mit
Kleiner Beweis:

Daher ergeben sich weder sichtbare Veränderungen noch Fehlermeldungen wegen unerlaubter threadübergreifender Vorgänge, wie anfangs genannt. Warum auch? Es ist ja alles so, wie Microsoft es wollte. Nur sollte man sich auch darüber im Klaren sein, wenn man entsprechenden Code schreibt. Oder verzapft.
ohne dabei vorher
Form1
explizit deklariert und initialisiert zu haben (siehe dazu den ein paar Zeilen weiter unten im verlinkten Thread von RodFromGermany, wie es richtig geht), wird sich irgendwann solche Fragen stellen: »Ich hab doch auf meinem Formular einen Button verändert. Warum sehe ich denn dann keine Veränderungen?« Oder »Ich greife in meinem Code explizit auf mein einziges Formular zu. Aber irgendwie passiert da gar nix. Noch nicht mal eine Fehlermeldung über unerlaubte threadübergreifende Vorgänge.«Wie RodFromGermany in seinem Thread zum korrekten Erstellen einer Formularinstanz bereits schrieb:
RodFromGermany schrieb:
Dies wird aufgerufen, weil es irgendwo steht (ich frage mich nur wo), weil es die jungen Kollegen (leider) falsch gezeigt bekommen oder weil es einfach, einfach VB6, ist.
Vielleicht liegt es an Gedanken wie: »Ich hab das immer schon so gemacht.«, »Das hab ich so bei youtube gesehen.« oder »Was habt Ihr denn? Läuft doch bisher.« (Ich erhebe keinen Anspruch auf Vollständigkeit

Die Profis wissen es, aber hier nochmal klar ausgedrückt: Wer wie oben ohne Deklaration und korrekte Initialisierung solche Codezeilen wie
Form1.Show
verwendet, der greift mit dem Teil Form1
nicht auf die Klasse selbst zu. Form1
mag zwar im eigenen Projekt eine Klasse sein (vorausgesetzt, man hat sich noch nicht die 5 Sekunden Zeit genommen, um den Namen sinnvoll zu ändern und somit aussagekräftig zu machen, aber das ist ein anderes Thema), aber1. ist es Nonsens, da
Form1
in erster Linie mal ein Bauplan ist. Man versuche sich vorzustellen, dass man eine Klasse Auto
hat, die eine Methode Fahren()
hat. Auto.Fahren()
wär dann so, als ob man sagt: »Bauplan des Autos: Fahre los.«2. ist in jener Zeile
Form1
eine Property der Klasse Form1
. Klingt verwirrend, ist aber so, was uns IntelliSense auch beweist:Man greift also auf eine mehr oder weniger ominöse Klasseneingeschaft zu. Warum ominös? Weil erst mit folgendem Wissen klar wird, was man sich damit antut:
MSDN schrieb:
My.Forms ist ein Beispiel für eine dynamisch erstellte Klasse. Diese Klasse wird für Sie bereitgestellt und definiert eine Factorymethode für jedes Formular in Ihrem Projekt. Wenn Sie über My.Forms.Form1 auf Form zugreifen, prüft die Factorymethode, ob bereits eine Instanz von Form1 geöffnet ist. Wenn dies der Fall ist, wird diese Instanz zurückgegeben. Andernfalls wird eine Instanz von Form1 erstellt und zurückgegeben.
[…]
Instanzen von My-Objekten werden pro Thread bereitgestellt. […] Die Instanz von My.Computer, die auf Thread 1 zurückgegeben wird, unterscheidet sich von der Instanz von My.Computer, die auf Thread 2 zurückgegeben wird.
Anders ausgedrückt: Wer mit Threads arbeitet, hat in Thread 1 mit
Form1
etwas anderes vor sich als in Thread 2. Daher der gern von mir in diesem Zusammenhang verwendete Begriff »thread-dependent property«. Kleiner Beweis:
Daher ergeben sich weder sichtbare Veränderungen noch Fehlermeldungen wegen unerlaubter threadübergreifender Vorgänge, wie anfangs genannt. Warum auch? Es ist ja alles so, wie Microsoft es wollte. Nur sollte man sich auch darüber im Klaren sein, wenn man entsprechenden Code schreibt. Oder verzapft.
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.