DragDrop enregistrement n'a pas réussi
Système.InvalidOperationException: DragDrop enregistrement n'
réussir. ---> Système.Le filetage.ThreadStateException:
Ce n'cette exception veux dire? - Je l'obtenir à cette ligne d'essayer d'ajouter un panneau à un panneau à l'exécution...
splitReport.Panel1.Controls.Add(ChartPanel);
De travail dans VS2008 C#
OriginalL'auteur | 2008-09-25
Vous devez vous connecter pour publier un commentaire.
Cette exception signifie que le thread qui possède le Panneau, le Panneau ajoutés) a été initialisée à l'aide du modèle de thread MTA. Le glisser/déposer système exige que le thread appelant utiliser le thread STA modèle (en particulier, il exige que COM être initialisé via OleInitialize). Les modèles de thread est une triste vestige de COM, un prédécesseur de la .NET plate-forme.
Si vous avez la
[STAThread]
attribut sur votre fonction Principale, puis le programme principal fil devrait déjà être STA. L'explication la plus probable, alors, que cette exception se passe sur un thread différent. Regardez la fenêtre Threads dans Visual Studio (Debug | Windows | Threads) lorsque l'exception se produit et voir si vous êtes sur un thread autre que le thread principal. Si vous êtes à la, la solution est probablement aussi simple que de définir le modèle de thread pour ce nouveau fil de discussion, où vous pouvez faire comme suit (ajouter ce code dans le thread où le contrôle est en cours de création):Thread.CurrentThread.SetApartmentState( ApartmentState.STA )
(
Thread
etApartmentState
sont membres deSystem.Threading
)Que le code doit se faire avant de réellement commencer le nouveau thread. Comme le fait remarquer @Tomer, vous pouvez également spécifier cette manière déclarative à l'aide de la
[STAThread]
attribut.Si vous trouvez que l'exception qui se passe sur le thread principal, post en arrière et laissez-nous savoir, et peut-être plus. Une trace de la pile au moment de l'exception peut aider à déterminer le problème.
OriginalL'auteur Charlie
OriginalL'auteur Sai Sherlekar
Ajouter le STAThreadAttribute attribut sur la méthode main. Cet attribut est requis si votre programme d'accès OLE des fonctions connexes, comme presse-papiers classe.
[STAThread]
static void main(string[] args)
{
}
OriginalL'auteur Ali Sadri
Je ne suis pas sûr de savoir si vous avez résolu ce problème ou pas. J'ai juste rencontré ce problème et je l'ai fixée par la suppression de mon
bin
annuaire.OriginalL'auteur Graviton
Oui, je me rends compte que cette question a été posée de 2 ans et demi. J'ai frappé cette exception et fait un peu de lecture sur. J'ai corrigé, mais ne voient pas ma solution n'importe où, donc je pensais que je poste quelque part quelqu'un d'autre peut être lu.
Une possibilité pour que cela se produise avec
[STAThread]
marqué sur leMain()
est si vous êtes l'exécution de ce sur un thread autre que celui que vous avez commencé.Je viens de tomber sur cette exception lorsque vous tentez de créer et de montrer une nouvelle forme dans un
BackgroundWorker.DoWork
méthode. Pour le fixer, j'ai enveloppé la création et à l'affiche de mon nouveau formulaire dans une méthode, et a ensuite appeléInvoke
sur cette méthode de manière à ce qu'il a tiré sur le thread d'INTERFACE utilisateur. Cela a fonctionné parce que le thread d'INTERFACE utilisateur commencé à partir de laMain()
méthode avec[STAThread]
marqué, comme d'autres réponses ici expliqué.OriginalL'auteur T.K.
De loin la façon la plus simple est:
Vous pouvez même passer des choses, pas de problème:
OriginalL'auteur Conrad de Wet
J'ai résolu cette erreur en utilisant code ci-dessous...j'ai été l'utilisation de fonds de Travailleurs et d'essayer d'accéder à l'INTERFACE utilisateur tout en arrière-plan travailleur..c'est pourquoi l'obtention d'erreur - DragDrop enregistrement n'a pas réussi.
Nous ne pouvons pas accéder à l'INTERFACE utilisateur à partir du code s'exécutant en arrière-plan travailleur ou dans le thread.
Grâce Heureux De Codage... :
OriginalL'auteur RAVI VAGHELA
J'ai rencontré cette situation récemment,
[STAThreadAttribute]
est dans mon cas,et j'ai résolu ce problème en utilisant Invoquer méthode,il peut être utile de vous les gars,je partage donc avec un peu d'extrait de code:Et InvokeHandler est un délégué comme ceci:
OriginalL'auteur zionpi
J'ai trouvé cette erreur, et je vois que celui que c'est montré lors de l'utilisation d'un autre thread appelant
MessageBox.Show(this, ...)
, où elle n'est pas initialisée.Nous avons besoin de retirer le propriétaire de la boîte de message pour supprimer l'erreur.
OriginalL'auteur Kosmas