vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

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

VB.NET - Ein- und Umsteiger
TypeInitialisationException wenn XML-Datei nicht vorhanden 
Autor: XaserX8
Datum: 04.07.12 15:56

Seid Gegrüßt,

Ich habe folgendes Problem:

ich habe ein Programm erstellt, welches die Konfigurationsdaten in einer XML-Datei speichert und bei Bedarf ausliest.
Außerdem sind Teile der Anwendung in einer DLL (Die Funktionen Import und Export) ausgelagert, welche aber noch auf einige Steuerelemente wie z.B eine Progressbar zugreift.
Die DLL wird bei Programmstart auf die Steuerelemente verwiesen.
An und für sich funktioniert auch alles, aber wenn ich die XML-Datei vor dem Programmstart lösche, ist das Programm nicht in der Lage die Export-Funktion auf die Steuerelemente zu verweisen, was merkwürdig ist, da das gleiche bei der Import Funktion funktioniert.

Ich habe nun mein Programm so umgeschrieben, dass vor der Steuerelementezuweisung geprüft wird ob die XML-Datei existiert und wenn nicht eine neue erstellt wird.
Jetzt bin ich so weit, dass beim ersten Programmstart eine XML-Datei erstellt wird, jedoch die gleiche Fehlermeldung wie bisher kommt.
Wenn man das Programm daraufhin erneut ausführt kommt keine Fehlermeldung obwohl die XML-Datei die gleiche ist wie in dem 1. Versuch und auch vor dem auftreten des Fehlers erstellt wird (ich hab sicherheitshalber mal ein thread.sleep(100) nach erstellen der xml-Datei eingebaut, hilft aber auch nix).

Ich verstehe den Fehler rein gar nicht, da ich nicht verstehe was die XML-Datei mit den Verweisen auf die Steuerelemente zu tuen hat.

Mein Code:

Try
    XMLLoad = XDocument.Load(strXMLPath)   'XML-Datei wird geladen
Catch
    Call Speichern()                       'XML-Datei wird erstellt falls nicht 
    ' vorhanden
    XMLLoad = XDocument.Load(strXMLPath)
End Try
 
'Import Funktion wird auf Steuerelemente verwiesen (Funktioniert)
cwKerioSvr.Import.pbStatus = Me.pgbFortschritt
cwKerioSvr.Import.ImportButton = Me.cmdImport
cwKerioSvr.Import.ExportButton = Me.cmdExport
cwKerioSvr.Import.CancelButton = Me.cmdCancel
cwKerioSvr.Import.Tabcontrol = Me.tacKerioConnector
cwKerioSvr.Import.ProgLabel = Me.lblProgress
cwKerioSvr.Import.TimerLink = Me.timIntervallImEx
cwKerioSvr.Import.AutoCheck = Me.cbxAutoStatus
 
'Import Funktion wird auf Steuerelemente verwiesen (Fehler in jeder Zeile)
cwKerioSvr.Export.pbStatus = Me.pgbFortschritt
cwKerioSvr.Export.ImportButton = Me.cmdImport
cwKerioSvr.Export.ExportButton = Me.cmdExport
cwKerioSvr.Export.CancelButton = Me.cmdCancel
cwKerioSvr.Export.Tabcontrol = Me.tacKerioConnector
cwKerioSvr.Export.ProgLabel = Me.lblProgress
cwKerioSvr.Export.TimerLink = Me.timIntervallImEx
cwKerioSvr.Export.AutoCheck = Me.cbxAutoStatus
Die Variablen sind folgendermaßen in der Im-/Export Funktion Definiert:
Public Shared pbStatus As Windows.Forms.ProgressBar
Public Shared ImportButton As Windows.Forms.Button
Public Shared ExportButton As Windows.Forms.Button
Public Shared CancelButton As Windows.Forms.Button
Public Shared Tabcontrol As Windows.Forms.TabControl
Public Shared ProgLabel As Windows.Forms.Label
Public Shared TimerLink As Windows.Forms.Timer
Public Shared AutoCheck As Windows.Forms.CheckBox
Ich weis hier echt nich weiter und wäre über jede Hilfe erfreut.

Die Error-Message ist: "Der Typeninitialisierer für "cwKerioSvr.Export" hat eine Ausnahme verursacht."
Wobei cwKerioSvr die DLL ist.

P.S.: Ich weiß der Try-Catch Befehl is nich Optimal aber erstmal klappt es!

Beitrag wurde zuletzt am 04.07.12 um 15:59:17 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: TypeInitialisationException wenn XML-Datei nicht vorhanden 
Autor: Manfred X
Datum: 04.07.12 16:04

Hallo!

Deine Variablen sind als Public Shared deklariert,
aber offenbar beziehen sich die Referenzübergaben
der Controls auf eine bestimmte Instanz.

Wieso wird die Control-Referenz nicht z.B. als <Klasse>.pbStatus = ....
übergeben??? (Mal davon abgesehen, dass man meist besser keine
UI-Elemente an Klassen übergibt).

MfG
Manfred
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: TypeInitialisationException wenn XML-Datei nicht vorhanden 
Autor: XaserX8
Datum: 04.07.12 16:09

Also das ist das erste Programm, das ich in vb.net schreibe deshalb hab ich eh noch nich so den durchblick.

ich brauch die UI-Elemente hauptsächlich nur um die eigenschaft enable = false zu setzen damit die Buttons und sonstiges nicht Anwählbar sind während der Im-/Export läuft (läuft im BackgroundWorker)

Und die Progressbar um den Im-/Export Fortschritt anzuzeigen

Könntest du vll mal ein Beispiel zeigen wie ich das als Klasse übergebe?

Vielen dank schonmal für die Antwort.

Beitrag wurde zuletzt am 04.07.12 um 16:15:25 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: TypeInitialisationException wenn XML-Datei nicht vorhanden 
Autor: Manfred X
Datum: 04.07.12 16:17

Wieso setzt Du die Enabled-Eigenschaft dieser Controls
nicht im UI-Thread (Benutzeroberfläche) auf false, ehe Du
Import-/Exportfunktionen in der DLL startest?

In einem Hintergrundprozess sollte kein Zugriff auf UI-Elemente
erfolgen. Löse statt dessen im Hintergrund Ereignisse aus und
reagiere in der Benutzeroberfläche auf diese Ereignismeldungen
(INVOKE erforderlich beim ZUgriff auf Controls).
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: TypeInitialisationException wenn XML-Datei nicht vorhanden 
Autor: XaserX8
Datum: 04.07.12 16:25

Der Zugriff auf die UI-Elemente läuft nicht im Hintergrundprozess nur die Im-/Export an sich, allerdings werden die UI-Elemente in der DLL angesprochen, da der Backgroundworker in dieser Initialisiert wird und der Value der Progressbar in der Backgroundworker__ProgressChanged aktualisiert wird.

Es klappt ja auch super in dem Import, in welchem die UI-Elemente auf die gleiche Art übergeben werden.
Der Export funktioniert auch, es sei den die XML-Datei ist bei Programmstart nicht vorhanden.

Ich erkenne einfach nicht den zusammenhang der XML-Datei mit den UI-Elementen.
In der XML-Datei ist nur die Konfiguration gespeichert, welche erst beim Start der Im-/Export funktion ausgelesen wird.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: TypeInitialisationException wenn XML-Datei nicht vorhanden 
Autor: xirton
Datum: 04.07.12 17:42

Ich würde da generell nicht mit den Controls rumhantieren beim Speichern / Laden von Konfigurationen. Schreib dir eine extra Klasse für all deine Einstellungen (Properties repräsentieren dabei die Zustände). Beim speichern setzt du alle deine Eigenschaften in der Konfigurationsklasse und serialisert dann das Objekt. Am besten zu XML (xmlserializer), da du dann auch noch von Hand was in der Konfig ändern kannst. Bei Laden deserialisert du dir die XML wieder zu deinem Konfigurationsobjekt und liest die Eigenschaften aus und setzt die Einstellungen an deinen Controls.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: TypeInitialisationException wenn XML-Datei nicht vorhanden 
Autor: keco
Datum: 04.07.12 18:44

Zitat:

[...] allerdings werden die UI-Elemente in der DLL angesprochen[...]

Das hört sich für mich schon falsch an. Denn das hätte man mit Delegates, speziell Events, realisieren können - ohne UI. Ähnlich wie bei WebClient.DownloadDataAsync und ähnliche Methoden.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: TypeInitialisationException wenn XML-Datei nicht vorhanden 
Autor: Manfred X
Datum: 04.07.12 19:13

Sobald der BackgroundWorker in der Import/Export-Klasse
ein Ereignis meldet, löst Du ein öffentliches Ereignis,
das in dieser Klasse definiert ist und die entsprechenden
Parameter umfasst, aus. Dieses Ereignis wird dann in der UI
aufgefangen und weiter verarbeitet.
Controls mußt Du also nicht an die I/E-Klasse übergeben!!

Die Exception steht in Zusamenhang mit dem Erstellen der Instanz
einer Klasse, die vermutlich deserialisiert werden soll???

MfG
Manfred
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Problem Gelöst 
Autor: XaserX8
Datum: 05.07.12 08:18

Ich hab es letztendlich doch noch hinbekommen.

Ich hatte bei den Public Variablen in der Export Klasse einen Verweis auf die XML-Datei.
Ich habe die XML-Datei jetzt an anderer Stelle geladen und somit funktioniert wieder alles.

Es sieht so aus als würde das Programm bei dem Befehl:
cwKerioSvr.Export.pbStatus = Me.pgbFortschritt
Sofort alle Export-Public-Variablen zuweisen, was ich nicht wusste.

Vielen Dank für eure Hilfe
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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-2024 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