Thread en cours doit être réglé à thread unique appartement dans VB.NET
C'est le new
méthode dans mon formulaire:
Public Sub New(ByVal ConnectionString As String, ByVal ConSql As SqlClient.SqlConnection, ByVal Daman As Array, ByVal SDate As Integer, ByVal FDate As Integer)
Threading.Thread.CurrentThread.TrySetApartmentState(Threading.ApartmentState.STA)
' This call is required by the Windows Form Designer.
'Error Appear in this line
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
Me.Sto_TypeFormFrameTableAdapter.Connection.ConnectionString = ConnectionString
Me.Sto_typeformTableAdapter.Connection.ConnectionString = ConnectionString
con = ConSql
com.Connection = con
ConNew = ConnectionString
DamaneCod = Daman
Start = SDate
Final = FDate
Fill()
End Sub
Lorsque je crée un nouvel objet de mon formulaire, le InitializeComponent
commande obtient une erreur.
Le message d'erreur est:
Thread en cours doit être réglé à thread unique appartement (STA) mode
avant OLE appels peuvent être effectués. S'assurer que votre Principale fonction est de s'
STAThreadAttribute marqués sur elle.
Ce formulaire est dans un projet dont la sortie est un fichier DLL pour un autre projet, et l'erreur n'apparaît pas dans un autre projet qui a utilisé ce fichier DLL.
Comment puis-je résoudre ce problème?
Ne pas faire ce genre de choses dans la Nouvelle procédure.
OriginalL'auteur Saeed-rz | 2013-01-01
Vous devez vous connecter pour publier un commentaire.
J'ai utilisé le code suivant à partir de ce site et ça fonctionne:
OriginalL'auteur M_Mogharrabi
Ne pas ignorer la valeur de retour de TrySetApartmentState(). Si vous obtenez est Fausse, alors il n'y a aucune raison d'essayer de continuer, votre code n'est pas d'aller travailler. Vous pouvez ainsi lancer une exception.
Vous obtiendrez cette exception lorsque vous essayez d'utiliser votre code d'une application en mode console ou à partir d'un thread qui n'est pas le thread principal d'un Winforms ou WPF application. Ceux ne sont pas des environnements accueillants pour un composant de l'interface utilisateur.
Un thread est nécessaire, qui est entré dans la STA appartement avant il a commencé, soit par l'attribut [STAThread] sur la méthode Principale d'une application ou par le Thread appelant.SetApartmentState() avant de commencer le fil. Et De L'Application.Run() ou la Forme.ShowDialog() doit avoir été appelé à prendre la boucle de message qui garde la forme fonctionnelle. Débogage en regardant la pile d'appel pour voir comment votre constructeur m'a appelé. L'utilisation de Débogage + Windows + Threads est utile de voir si ce qui s'est passé sur un thread de travail au lieu de l'application du thread principal.
Eh bien, ce serait une raison évidente, vous obtenez cette exception. Si vous ne voyez pas l'Application.Run() dans la trace de la pile, puis utilisez le débogueur les Threads de la fenêtre, comme je l'ai documenté.
au fil de la fenêtre, j'ai 6 ligne,4 d'entre eux est le thread de travail,l'un d'eux est vide et l'autre thread principal,et l'erreur est dans le thread principal
OriginalL'auteur Hans Passant