Forums Neueste Beiträge
 

Spekulative Frage zu CheckForIllegalCrossThreadCalls

26/03/2008 - 19:39 von Jens Duczmal | Report spam
Hallo,

ich melde mich schonmal freiwillig für Freitag an,
denn ich vermute mal, das CheckForIllegalCrossThreadCalls=False
das neue 'End' ist :-)

Ich würde gerne mal die rein spekulative Frage stellen,
ob jemand eine Idee hat, was schlimmstenfalls passieren würde.

Wie schon mehrfach geschrieben (das wird auch mein letzter
Thread dazu sein) soll Anwendung B per Interface in
Anwendung A Tool/Menübars erstellen.

Ob ich die Zugriffe nicht irgendwie doch in denselben
Thread bekomme wàre zwar immer noch interessanter,
aber ich vermute das geht nicht so, wie ich mir das
vorstelle.

Also, nur mal angenommen man würde das "Problem"
mit CheckForIllegalCrossThreadCalls "umgehen" bzw.
einfach ignorieren. Etwas anderes als Toolbars
werden nicht Threadübergreifend gefüllt.
Bestenfalls Events ausgetauscht, aber das liesse
sich mit WM_COPYDATA oder Remoting erledigen.


Jehova! Damit es sich für Freitag auch lohnt ;-)


Was könnte passieren? "Instabil" ist dehnbar.

Ich könnte mir folgendes Vorstellen:

1) Die Toolbar bzw. einzelne Buttons werden nicht
erstellt.

2) Die Buttons werden erstellt, aber Anwendung A
weiss nichts davon. Ergo wird kein Click ausgelöst.

3) Fehler beim Grafikaufbau der Toolbars.

Oder kann man dazu schlecht irgendwas sagen, wenn
"Instabil" muss ja nicht sein und wenn, dann làsst
es alles mögliche an Sonderheiten zu? Vermutlich
wird es so sein.

Von der Theorie her weiss ich, das B wirklich
nur auf die einzige Instanz von A zugreift.
Das ist recht sichergestellt. Hilft aber nichts,
wenn Windows.Forms lediglich STA unterstützen.

Appartment-Threading kann man da nicht einstellen,
oder? Und dann B in dasselbe Appartment stellen
(wie auch immer das gehen soll...)

Zur Not muss ich mir irgendeine andere Alternative
überlegen, die aber auch wiederum nicht wirklich
vertretbare Nachteile mit sich bringen dürfte.
z.B. die Zugriffe von B durch eine Klassenbibliothek simulieren
die dann vermutlich ja im selben Thread laufen dürfte
da sie von A aufgerufen wird. Wàre aber aus anderen
Gründen unschön.

Wie versprochen, mein letzter Thread hier dazu.
Man muss die NG ja nicht mit sowas zumüllen.

Gruß,
Jens
 

Lesen sie die antworten

#1 Thomas Scheidegger
26/03/2008 - 22:14 | Warnen spam
Hallo Jens

das "Problem" mit CheckForIllegalCrossThreadCalls "umgehen" bzw.
einfach ignorieren



sehr schlechte Idee.
Wie gesagt ist die Ursache tief in Windows verwurzelt.
Einige direkte Zugriffe (ohne Control.Invoke)
mögen (heute/zeitweise/zufàllig) bei dir funktionieren,
aber nur zB auf einem schnelleren (QuadCore/64-Bit) Rechner,
oder zukünftigen Windows/.NET-ServicePack/Version usw.
könnte deine App schlicht wegsterben/einfrieren.
Oder mit nichtssagenden Low-Level Exceptions kapitulieren,
die ggf nicht so offensichtlich auf CheckForIllegalCrossThreadCalls
zurückzuführen sind.
Irgendwelche 'kosmetische' Fehler sind _auch_ möglich,
aber als ernste Vorwarnung zu verstehen.

Grundsatz zur Verwendung von Threads:
schon das Design muss _wasserdicht_ sein,
alles andere (ala Trial&Error) ist naive Lotterie.


Deine Situations-Beschreibung ist leider ungenau,
aber mir scheint eine Trennung
(VB.NET <> VB6, die sogar als separate Apps laufen?)
mitten durch ein GUI/Formular als sehr fragwürdig.





Thomas Scheidegger - 'NETMaster'
http://www.cetus-links.org/oo_dotnet.html - http://dnetmaster.net/

Ähnliche fragen