backup Skrevet 7. november 2006 Skrevet 7. november 2006 (endret) Lager med vb.net en applikasjon for pocket pc (windows mobile 5) der jeg skal sende data til clipboard med: Clipboard.SetDataObject("Test data") Imidlertid, jeg får feilmeldingen: "Gjeldende tråd må være satt til STA-modus før OLE kall kan utføres. Sørg for at det er merket av for STAThreadAttribute i din Main-funksjon". Kunne noen si hvordan jeg konkret må gjøre dette? Kjører Framework 2, Visual Studio 2005. Endret 8. november 2006 av backup
Manfred Skrevet 7. november 2006 Skrevet 7. november 2006 (endret) Det skal stå C#: [STAThread] public static void Main() VB: <STAThread()> _ Public Shared Sub Main() i starten av koden din... Hva med å bruke msdn og feilmeldingen litt? Endret 7. november 2006 av Manfred
backup Skrevet 7. november 2006 Forfatter Skrevet 7. november 2006 Det skal stå C#: [STAThread] public static void Main() VB: <STAThread()> _ Public Shared Sub Main() i starten av koden din... Hva med å bruke msdn og feilmeldingen litt? 7236622[/snapback] Med denne innsatt: <STAThread()> _ Public Shared Sub Main() Application.Run(Form1) End Sub får jeg meldingen at 'STAThread' is not defined, og at jeg skal sette inn 'MTAThread' i stedet, men med <MTAThread()> _ Public Shared Sub Main() Application.Run(Form1) End Sub får jeg imidlertid den samme feilmeldingen, dvs "Gjeldende tråd må være satt til STA-modus før OLE kall kan utføres. Sørg for at det er merket av for STAThreadAttribute i din Main-funksjon".
wolf5 Skrevet 7. november 2006 Skrevet 7. november 2006 Var borti samme problemstilling men for en vanlig WinApp. Da brukte jeg winapi istedet med DllImport for å få til det jeg ville. Om noen vet noen måte å bruke clipboard objektet i .Net uten å ha en STAThread (single threaded application) løsning så hadde det vært fint å vite. Noen ganger ønsker man jo å sette clipboard info i en tråd. Har Pocket PC tilgang til samme api på noe vis? I så tilfelle kan du prøve dette: public class Win32ClipBoard { public enum Formats { CF_TEXT = 1, CF_BITMAP = 2, CF_METAFILEPICT = 3, CF_SYLK = 4, CF_DIF = 5, CF_TIFF = 6, CF_OEMTEXT = 7, CF_DIB = 8, CF_PALETTE = 9, CF_PENDATA = 10, CF_RIFF = 11, CF_WAVE = 12, CF_UNICODETEXT = 13, CF_ENHMETAFILE = 14 } //[DllImport("User32.dll")]public static extern int GetClipboardOwner(); [DllImport("user32.dll")] static extern bool OpenClipboard(IntPtr hWndNewOwner); [DllImport("user32.dll")] static extern bool EmptyClipboard(); [DllImport("user32.dll")] static extern IntPtr SetClipboardData(Formats uFormat, IntPtr hMem); [DllImport("user32.dll")] static extern bool CloseClipboard(); public static void SetClipboardText(string text) { IntPtr hClipboard = IntPtr.Zero; IntPtr hInstance = IntPtr.Zero; if (OpenClipboard(hInstance)) { IntPtr unmanagegstring = Marshal.StringToCoTaskMemAnsi(text); EmptyClipboard(); SetClipboardData(Formats.CF_TEXT, unmanagegstring); CloseClipboard(); } else { //Ignore... } } }
Manfred Skrevet 7. november 2006 Skrevet 7. november 2006 En noe grisete løsning, men grisete løsninger er fine hvis de funker Hehe..
wolf5 Skrevet 7. november 2006 Skrevet 7. november 2006 Det fine med winapi er at du kan slippe deg løs fra .Net sin til tider lammende begrensninger. Som f.eks at .Net krever at Clipboard kalles fra STAThread. Ulempen er at f.eks nyere operativsystemer kan komme i konflikt da winapi'et kan endre seg med OS.
backup Skrevet 8. november 2006 Forfatter Skrevet 8. november 2006 Takker for alle svar. Løste problemet med først Clipboard.Clear og så Clipboard.SetText i OpenNetCF. Problemet vedvarte i emulatoren, men forsvant på pocket pc'en.
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå