ActiveX-Steuerelement "8856f961-340a-11d0-a96b-00c04fd705a2' kann nicht instanziiert werden, da der aktuelle thread ist nicht in einem Singlethread-apartment
Bin ich immer diese Fehlermeldung wenn ich versuchen zu zeigen, eine form mit einem webbrowser in es.
ActiveX-Steuerelement "8856f961-340a-11d0-a96b-00c04fd705a2' kann nicht instanziiert werden, da der aktuelle thread ist nicht in einem Singlethread-apartment
Rufe ich es durch:
Public Class frmMain
Class Server
Public Shared Sub Main()
Dim aTcpMessaging As IMessagingSystemFactory = New TcpMessagingSystemFactory()
Dim anInputChannel As IInputChannel = aTcpMessaging.CreateInputChannel(theIPforLocal & ":" & thePort)
Dim aStringMessagesFactory As IStringMessagesFactory = New StringMessagesFactory()
Dim aStringMessageReceiver As IStringMessageReceiver = aStringMessagesFactory.CreateStringMessageReceiver()
AddHandler aStringMessageReceiver.MessageReceived, AddressOf StringMessageReceived
aStringMessageReceiver.AttachInputChannel(anInputChannel)
End Sub
Private Shared Sub StringMessageReceived()
Call New frmMM().Show()
End Sub
End Class
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim RelState As Integer = 0
Call frmMain.Server.Main()
lblVer.Text = "V.7"
Pid = 0
End Sub
End Class
Wie kann ich laden Sie diese nach oben, sodass er mir nicht zeigen, dass Fehler?
Dank.
David
Code update
Class Server
<STAThread()> Public Sub Main()
Dim aTcpMessaging As IMessagingSystemFactory = New TcpMessagingSystemFactory()
Dim anInputChannel As IInputChannel = aTcpMessaging.CreateInputChannel(theIPforLocal & ":" & thePort)
Dim aStringMessagesFactory As IStringMessagesFactory = New StringMessagesFactory()
Dim aStringMessageReceiver As IStringMessageReceiver = aStringMessagesFactory.CreateStringMessageReceiver()
AddHandler aStringMessageReceiver.MessageReceived, AddressOf StringMessageReceived
aStringMessageReceiver.AttachInputChannel(anInputChannel)
End Sub
Private Shared Sub StringMessageReceived()
Call New frmMM().Show()
End Sub
End Class
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim RelState As Integer = 0
Call frmMain.Server.Main() '<-- the error now
lblVer.Text = "V.7"
Pid = 0
End Sub
End Class
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem tritt auf, weil eine UI-Komponente erstellt wird, wird auf einem nicht-UI-thread.
Hier ist eine vereinfachte version des Codes, die brechen mit dieser Fehlermeldung.
Um das problem zu beheben, brauchen Sie nur, um wieder in den UI-thread vor dem erstellen des Steuerelements.
Also bei deinem Beispiel glaube ich, der code wäre:
Unter der Annahme, dass Sie nicht mit dem application-framework, die Sie brauchen, um zu dekorieren Sie Ihr
Sub Main
mit der STAThread Attribut.Beispiel:
VB-Anwendungen, das application-framework keine sorgen zu machen, über dieses Attribut zu verwenden, da der compiler wird, gilt es automatisch.
frmMain.Server.Main
Ihre Haupteinstiegspunkt für die Anwendung?Nur suchte mich dumm, da bin ich nicht wirklich tun, jede threading mich, aber ich fand eine Lösung für mein problem mit dem gleichen Fehler.
Sowieso, Sie auch bekommen diesen Fehler: "ActiveX-Steuerelement" 8856f961-340a-11d0-a96b-00c04fd705a2' kann nicht instanziiert werden, da der aktuelle thread ist nicht in einer single-threaded apartment", wenn Sie versuchen, ein Objekt in einem Formular (mit dem WebBrowser-Steuerelement), wenn das Formular noch nicht erstellt wurde.
fyi