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.