IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#] STAThread et ClipBoard


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 238
    Par défaut [C#] STAThread et ClipBoard
    Bonjour à tous.
    J'ai un petit problème d'accès au ClipBoard je pense. Mon application contient une dll. Cette DLL génère un Thread qui a accès à un RichTextBox.
    J'aimerais afficher une image dans ce RTB via le Thread.

    J'utilise ce code pour dessiner mon image :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Image img = Image.FromFile("D:\\Projects\\Simulateur\\Images\\Reception.png");
    Clipboard.SetDataObject(img);
    RTB_TracesHexa.Paste();
    img.Dispose();
    Ce qui est bizard c'est que je vois l'image s'afficher et que l'erreure remonte juste apres.


    Voila l'erreur remontée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    System.Threading.ThreadStateException was unhandled
      Message="Current thread must be set to single thread apartment (STA) mode before OLE calls can be made. Ensure that your Main function has STAThreadAttribute marked on it."
      Source="System.Windows.Forms"
      StackTrace:
           at System.Windows.Forms.Clipboard.SetDataObject(Object data, Boolean copy, Int32 retryTimes, Int32 retryDelay)
           at System.Windows.Forms.Clipboard.SetDataObject(Object data)
           at Simulateur.FTrace.AjouteTrace(String msg, Type_Trace TypeTrace) in D:\Projects\Simulateur\Simulateur\FTrace.cs:line 22
           at Simulateur.FPrincipale.AjouteTrace(String msg, Type_Trace TypeTrace) in D:\Projects\Simulateur\Simulateur\FPrincipale.cs:line 136
           at Simulateur.Noyau.AjouteTrace(String msg, Type_Trace TypeTrace) in D:\Projects\Simulateur\Simulateur\Noyau.cs:line 161
           at Master_ModBusLib.Master_ModBus.launchGI() in D:\Projects\Simulateur\ModBus\Master_ModBus.cs:line 58
           at Master_ModBusLib.Master_ModBus.OrdonnancementInterrogation() in D:\Projects\Simulateur\ModBus\Master_ModBus.cs:line 27
           at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
           at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
           at System.Threading.ThreadHelper.ThreadStart()
    J'ai essayer de décrypter le message d'erreure et j'ai vérifier que mon main disposait bien du [STAThread]. Mais puisque mon Thread est crée dans ma Dll, je ne sais pas trop ou mettre ce [STAThread] pour qu'il s'applique également à cette DLL.
    Mais au fait ca sert a quoi [STAThread] ?

    Merci d'avance pour vos réponses.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 238
    Par défaut
    Qqun connait-il la réponse ?

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 238
    Par défaut
    Si ca interesse des gens j'ai trouvé la solution.
    Il faut affecter à la propriété ApartementState du Thread la valeur STA de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MonThread.SetApartmentState(ApartmentState.STA);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MFC] copy to clipboard
    Par r0d dans le forum MFC
    Réponses: 6
    Dernier message: 21/10/2004, 15h03
  2. ClipBoard tout type ??
    Par Argonz dans le forum Windows
    Réponses: 13
    Dernier message: 01/07/2004, 12h22
  3. [Clipboard] Intercepter le changement du clipboard
    Par microseb dans le forum C++Builder
    Réponses: 2
    Dernier message: 02/03/2004, 01h38
  4. PB Clipboard
    Par carnifex77850 dans le forum Langage
    Réponses: 3
    Dernier message: 09/11/2002, 13h43
  5. Copier le texte d'un ListBox dans le clipboard.
    Par Clément[Delphi] dans le forum Composants VCL
    Réponses: 3
    Dernier message: 18/08/2002, 08h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo