vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: .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.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
.ShowDialog(owner) bei verschiedenen Threads, wie?4.726keco28.03.10 21:02
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?3.892Manfred X28.03.10 21:15
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?4.088keco28.03.10 21:31
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?3.916Manfred X28.03.10 21:39
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?3.871keco28.03.10 21:47
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?3.894Manfred X28.03.10 21:58
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?3.872keco28.03.10 22:03
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?4.170keco28.03.10 22:16
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?3.866ModeratorFZelle29.03.10 13:42
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?4.076keco29.03.10 19:39
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?4.091ModeratorFZelle29.03.10 19:57
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?3.907keco29.03.10 20:08
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?3.837Manfred X29.03.10 20:35
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?4.120Manfred X29.03.10 20:00
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?4.101keco31.03.10 09:15
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?3.910Manfred X31.03.10 09:23
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?3.897keco31.03.10 09:40
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?3.817Manfred X31.03.10 10:05
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?3.892keco31.03.10 12:23
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?3.905ModeratorDaveS31.03.10 12:49
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?4.036keco31.03.10 12:59
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?3.837ModeratorDaveS31.03.10 13:24
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?3.844keco31.03.10 20:59
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?3.933ModeratorDaveS01.04.10 09:11
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?3.876Manfred X01.04.10 09:16
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?3.825ModeratorDaveS01.04.10 09:42
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?3.879ModeratorFZelle01.04.10 11:07
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?3.885keco01.04.10 16:45
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?4.019ModeratorDaveS01.04.10 18:05
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?3.832keco01.04.10 20:26
Re: .ShowDialog(owner) bei verschiedenen Threads, wie?3.987ModeratorFZelle02.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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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