Plötzlicher Thread-Fehler durch Klassenvariable?

11/11/2009 - 11:10 von Manuel Kavata | Report spam
Hallo zusammen,

mein Problem ist nicht ganz einfach zu beschreiben, aber ich versuche es
mal. Wenn Form2 geladen wird, dann startet einen Hintergrundprozess:

LUThread = New Threading.Thread(AddressOf FUD)
LUThread .IsBackground = True
LUThread .Start()

Innerhalb der Sub FUD arbeite ich mit .InvokeRequired und einem Delegaten um
threadsicheren Zugriff auf ein Steuerelement zu bekommen. Das funktioniert
auch. Nun passiert es ab und zu daß Form1 eine Prozedur in Form2 aufruft:

Friend Sub Refresh(Optional ByVal newState As String = "")
'...
Dim NewMail As New cls_SMTPMail("mail.gmx.net", "Ich", "user", "pwd")
'Keine Probleme
End Sub

Auch hier gibt es noch keine Probleme. Wenn ich allerdings einen Aufruf zur
Instanz-Prozedur meiner eigenen SMTP-Klasse mit einfüge:

NewMail.SendEmail("empfànger", "Betreff", "Text")

dann werden sehr schnell folgene Meldungen ins Direktfenster geworfen, OHNE
daß direkt eine Exception geworfen wird:

Eine Ausnahme (erste Chance) des Typs "System.FormatException" ist in
System.dll aufgetreten.
Eine Ausnahme (erste Chance) des Typs "System.FormatException" ist in
System.Windows.Forms.dll aufgetreten.
Eine Ausnahme (erste Chance) des Typs
"System.Threading.ThreadAbortException" ist in mscorlib.dll aufgetreten.

Ich habe die Klasse cls_SMTPMail schon mal soweit abstrahiert daß der Fehler
gerade noch auftritt. Und zwar muß es irgendwas mit der Verwendung der
Klassenvariablen MyAddress zu tun haben. Hier die Klasse:

Public Class cls_SMTPMail
Private MyAddress As String

Public Sub New(ByVal SMTPServer As String, ByVal MyAddress As String,
ByVal UserName As String, ByVal Password As String)
Me.MyAddress = MyAddress
'...
End Sub

Friend Sub SendEmail(ByVal ReceiverAddress As String, ByVal Subject As
String, ByVal MailText As String)
Dim oMail As New MailMessage(Me.MyAddress, ReceiverAddress)
'...
End Sub
End Class

Wieso bewirkt diese Zuweisung diese Ausnahmen und wieso bricht mein Thread
deswegen ab?

Hoffe ihr könnt mich diesbezüglich aufschlauen.

MfG,

Manuel
 

Lesen sie die antworten

#1 Armin Zingler
11/11/2009 - 11:36 | Warnen spam
Manuel Kavata schrieb:

Friend Sub Refresh(Optional ByVal newState As String = "")
'...
Dim NewMail As New cls_SMTPMail("mail.gmx.net", "Ich", "user", "pwd")
'Keine Probleme
End Sub



Nur nebenbei: Pràfixe wie "cls" sind unüblich.

Auch hier gibt es noch keine Probleme. Wenn ich allerdings einen Aufruf zur
Instanz-Prozedur meiner eigenen SMTP-Klasse mit einfüge:

NewMail.SendEmail("empfànger", "Betreff", "Text")

dann werden sehr schnell folgene Meldungen ins Direktfenster geworfen, OHNE
daß direkt eine Exception geworfen wird:



Ich kann so keine Ursache erkennen. Zwei Möglichkeiten:
- Aktiviere mal in der IDE unter Debuggen -> Ausnahmen diese Exception.
- Verwende Try-Catch in der Thread-Hauptprozedur.

Eine Ausnahme (erste Chance) des Typs "System.FormatException" ist in
System.dll aufgetreten.
Eine Ausnahme (erste Chance) des Typs "System.FormatException" ist in
System.Windows.Forms.dll aufgetreten.
Eine Ausnahme (erste Chance) des Typs
"System.Threading.ThreadAbortException" ist in mscorlib.dll aufgetreten.




Wieso bewirkt diese Zuweisung diese Ausnahmen und wieso bricht mein Thread
deswegen ab?



Inwiefern hat das überhaupt etwas mit Threading zu tun? Besteht dasselbe
Problem, wenn du es testhalber in Sub Main bzw irgendwo im Start-Thread machst?

Und welche Zuweisung? Ich sehe nur eine Zuweisung im Konstruktor. Du schreibst aber,
dass der Fehler erst auftritt, wenn du Sub SendEmail aufrufst. Offenbar
tritt der Fehler dann im Konstruktor der Klasse MailMessage auf. Was hast
du zu diesem Zeitpunkt in den Parametern stehen? Sind das gültige Strings
oder sind sie die Ursache für die FormatException?


Armin

Ähnliche fragen