| |

VB.NET - Ein- und UmsteigerRe: .ShowDialog(owner) bei verschiedenen Threads, wie? | |  | Autor: keco | Datum: 31.03.10 09:40 |
| Nicht der Backgroundworker zeigt die FormB an, sondern die FormA soll FormB anzeigen. Denn die Klasse mit dem BackgroundWorker soll allgemein bleiben. Ich möchte mir die Gelegenheit offen halten auch andere Formulare verwenden zu können, die eventuell andere Ergebnisse liefern sollen.
Soviel Code gibt es dazu eigentlich nicht. Der BGW löst ein Event aus, in FormA sieht das so aus:
Private Delegate Function ShowFormHandler() As DialogResult
Private pShowFormHandler As New ShowFormHandler(AddressOf ShowForm)
Private Function ShowForm() As DialogResult
Return pMyForm.ShowDialog
End Function
Private Sub FileNameConflict(ByVal e As FileNameConflictEventArgs) _
Handles pCore.FileNameConflict
pMyForm.SourceFile = e.SourceFile
pMyForm.TargetFile = e.TargetFile
Try
If Not pMyForm.IsHandleCreated Then pMyForm.CreateControl()
Debug.WriteLine(pMyForm.IsHandleCreated)
If pMyForm.InvokeRequired Then
e.Result = CType(pMyForm.Invoke(pShowFormHandler, New Object() _
{}), DialogResult)
Else
Debug.WriteLine("Kein Invoke nötig")
End If
Catch ex As Exception
Debug.WriteLine(ex.Message)
End Try
End Sub pMyForm ist hier als FormB deklariert.
Beim ersten Mal läuft alles prima, wird aber das Ereignis gleich danach ein zweites mal ausgelöst, dann gibt es besagte Exception.
Noch eine Anmerkung zu dem Code:
Ich bin mit dem Debugger durchgelaufen und da haben im ersten Durchlauf die Eigenschaften folgende Werte:
pMyForm.IsHandleCreated = True
Debug.WriteLine erzeugt "True"
pMyForm.InvokeRequired = True
Im 2. Durchlauf:
pMyForm.IsHandleCreated = False
Debug.WriteLine erzeugt "False" (obwohl pMyForm.CreateControl() aufgerufen wird und dabei ein Handle erstellt werden sollte, laut MSDN? *)
pMyForm.InvokeRequired = False
Wieso sind die Werte plötzlich alle ganz anders als im 1. Durchlauf? Was läuft da schief?
EDIT:
* Das Problem jedenfalls hat sich erledigt, aus MSDN: "CreateControl does not create a control handle if the control's Visible property is false."
Ich habe also nun das Handle erzeugen lassen, diesmal wird auf der Konsole "True" ausgegeben, ändert aber nicht den Rest des Verhaltens.
Beitrag wurde zuletzt am 31.03.10 um 10:00:25 editiert. |  |
 .ShowDialog(owner) bei verschiedenen Threads, wie? | 4.726 | keco | 28.03.10 21:02 |   Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 3.892 | Manfred X | 28.03.10 21:15 |    Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 4.088 | keco | 28.03.10 21:31 |     Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 3.916 | Manfred X | 28.03.10 21:39 |      Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 3.871 | keco | 28.03.10 21:47 |       Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 3.894 | Manfred X | 28.03.10 21:58 |        Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 3.872 | keco | 28.03.10 22:03 |   Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 4.170 | keco | 28.03.10 22:16 |    Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 3.866 | FZelle | 29.03.10 13:42 |     Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 4.076 | keco | 29.03.10 19:39 |      Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 4.091 | FZelle | 29.03.10 19:57 |       Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 3.907 | keco | 29.03.10 20:08 |        Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 3.837 | Manfred X | 29.03.10 20:35 |      Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 4.120 | Manfred X | 29.03.10 20:00 |   Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 4.101 | keco | 31.03.10 09:15 |    Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 3.910 | Manfred X | 31.03.10 09:23 |     Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 3.897 | keco | 31.03.10 09:40 |      Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 3.817 | Manfred X | 31.03.10 10:05 |       Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 3.892 | keco | 31.03.10 12:23 |    Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 3.905 | DaveS | 31.03.10 12:49 |     Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 4.036 | keco | 31.03.10 12:59 |      Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 3.837 | DaveS | 31.03.10 13:24 |       Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 3.844 | keco | 31.03.10 20:59 |        Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 3.933 | DaveS | 01.04.10 09:11 |         Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 3.876 | Manfred X | 01.04.10 09:16 |          Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 3.825 | DaveS | 01.04.10 09:42 |          Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 3.879 | FZelle | 01.04.10 11:07 |   Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 3.885 | keco | 01.04.10 16:45 |    Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 4.019 | DaveS | 01.04.10 18:05 |     Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 3.832 | keco | 01.04.10 20:26 |    Re: .ShowDialog(owner) bei verschiedenen Threads, wie? | 3.987 | FZelle | 02.04.10 11:45 |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
sevZIP40 Pro DLL 
Zippen und Unzippen wie die Profis!
Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) Access-Tools Vol.1 
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|