Hallo,
ich stehe noch am Anfang von VB2005.
Habe ein Projektmappe mit zwei Projekten.
Im einen Projekt befinden sich Formulare etc. das zweite Projekt ist als DLL konzipiert mit Öffnen der Datenbank, sowie mehreren Benutzersteuerelementen, die ich im ersten Projekt nutze.
Das Projekt soll nun mit einem Loginfester gestartet werden.
Während das Loginfester läuft, also der Benutzer Eingaben etc macht, soll bereits die Datenbank geöffnet werden, Tabellen ausgelesen, sowie 2 Treeview's mit den Tabellen angaben erstellt werden.
Das Loginfester hat also den Focus und nach dem Login erfolgt sofort das Anzeigen des Hauptformulars mit den beiden Treeviews.
Habe nun versucht einen Hintergrundprozess zu verwenden.
Jedoch wenn ich zum Erstellen der Treeview komme bekomme ich folgende Fehlermeldung:.
Der für dieses Steuerelement durchgeführte Vorgang wird vom falschen Thread aufgerufen. Marshallen Sie den richtigen Thread mit Control.Invoke oder Control.BeginInvoke, um den Vorgang auszuführen.
Was bedeutet dies?
Bisher habe ich folgenden Code:
FormularCode:
Imports System.IO
Imports System.ComponentModel
Public Class frmLayoutgenerator
Dim thBackround As BackgroundWorker 'Thread
<pre><code>Public Sub New()
InitializeComponent()
Backround_Prozess() 'Hintergrundprozess starten
End Sub Private Sub Backround_Prozess()
thBackround = New BackgroundWorker
AddHandler thBackround.DoWork, AddressOf thBackround_dowork
AddHandler thBackround.RunWorkerCompleted, AddressOf thBackround_Completed
thBackround.RunWorkerAsync()
End Sub Private Sub thBackround_DoWork(ByVal sender As Object, ByVal e As _
DoWorkEventArgs)
pbenTreeview.Datenbank_OEffnen() 'DB geöffnet, Tabelle mit DataReader
' geöffnet
BentrvFeldDict1.benTreeview_FeldDictionary_anzeigen() 'TreeView
' aufbauen
BentrvProgDict1.benTreeview_ProgrammDictionary_anzeigen() 'Treeview
' aufbauen
End Sub End Classdll um Datenbank und Tabellen zu öffnen, sowie Treeview zu befüllen
Public Sub Informix_Datenbank_aufbauen()
modInformixVerbindung.DatenbankConnection_Aufbauen()
If pbDBOK = True Then
'DB Verbindung geöffnet
modInformixVerbindung.Tabelle_Felddict_oeffnen()
modInformixVerbindung.Tabelle_ProgDict_oeffnen()
End If
End Sub Public Sub benTreeview_FeldDictionary_anzeigen()
Dim lfdnr As Integer
Dim Punkt As String = "", KnPunkt As String = "", UntPunkt As String = "", _
Index As String = ""
Do While rsFeldDict.Read
Punkt = rsFeldDict("dict_bereich").ToString
If KnPunkt = Punkt Then
Index = rsFeldDict("dict_lfdnr").ToString 'Unterknotenpunkt anlegen
UntPunkt = rsFeldDict("dict_feldname").ToString
trvFeldDict.Nodes(lfdnr).Nodes.Add(Index, UntPunkt)
Else
If KnPunkt <> "" Then lfdnr = lfdnr + 1 'HauptKnotenpunkt anlegen
KnPunkt = rsFeldDict("dict_bereich").ToString
Index = rsFeldDict("dict_lfdnr").ToString
trvFeldDict.Nodes.Add(Index, KnPunkt) FEHLERMELDUNG!!!!!
'Unterknotenpunkt anlegen (1. Unterknotenpunkt)
Index = rsFeldDict("dict_lfdnr").ToString & "_1"
UntPunkt = rsFeldDict("dict_feldname").ToString
trvFeldDict.Nodes(lfdnr).Nodes.Add(Index, UntPunkt)
End If
Loop
End Sub wie kann ich auch die Treeview's im Hintergrund befüllen lassen?
Ohne den Hintergrund-Prozess funktioniert das Befüllen der Treeview's.
Danke |