STA-Modus (Single Thread Apartment) festlegen

Hallo zusammen,

bei der Ausführung von etwas Code unter Microsoft Visual Studio 2005 (Rest zur Version siehe unten) bekomme ich in folgendem Abschnitt einen Fehler.

private string loadSourceFileName (string fileName)
{
OpenFileDialog loadSiaFile = new OpenFileDialog();
loadSiaFile.FileName = fileName;
loadSiaFile.ShowDialog();
}

Das ShowDialog bleibt mit:
System.Threading.ThreadStateException wurde nicht behandelt.
Message=„Für den aktuellen Thread muss der STA-Modus (Single Thread Apartment) festgelegt werden, bevor OLE-Aufrufe ausgeführt werden können. Stellen Sie sicher, dass die Hauptfunktion mit STAThreadAttribute gekennzeichnet ist. Diese Ausnahme wird nur ausgelöst, wenn ein Debugger mit dem Prozess verbunden ist.“

Was ist zu tuen? In einer anderen Anwendung klappt das einwandfrei.

mfg

Dirk.Pegasus

Version 8.0.50727.42 (RTM.050727-4200)
Microsoft .NET Framework
Version 2.0.50727

Installierte Edition: C# Express

Microsoft Visual C# 2005 76544-000-0000011-00126
Microsoft Visual C# 2005

Hallo!

Wie die Exception schon sagt, muss der Thread, in dem dieser Code ausgeführt wird, als STAThread gekennzeichnet sein.
Höchstwahrscheinlich (weil ich nicht annehme, dass Du den OpenFileDialog in einem separaten Thread aufrufst - lässt sich aber anhand des geposteten Codes nicht entscheiden) reicht es, wenn Du einfach vor Dein „Main“ die Zeile
[STAThread]
einfügst.

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

selbes problem…
hallo dirk,

ja, ich habe das gleiche problem, sogar gleichfalls mit dem openfiledialog…ich weiss, dass der vorschlag im posting zuvor nix hilft, ich habe alle threadspezifischen attribute in meiner main-methode korrekt angegeben.

leider kenne ich mich mit threads nicht wirklich gut uas, hier aber noch ein link, wo es um genau diesen fehler geht:
http://blogs.msdn.com/jmstall/archive/2005/09/15/ico…

übrigens, ich weiss nicht, wie dein code zustande kam:
ich hatte ein projekt als stand-alone-solution (outputtype ‚exe‘) und als dll eingebunden in ein grösseres. das grössere konvertiert hat(te) gleichfalls openfiledialogs, die funktionieren immer noch (nach der konvertierung).
das stand-alone-solution - projekt hat eine klasse mehr, nämlich eine form in der der fehler beim aufruf des ofd passiert.

vielleicht lässt isch ja anhand von problem-ähnlichkeiten herausfinden was los ist.

wenn du eine lösung hast -> bitte mitteilen!
danke,

stefan

update & lösung…
hallo dirk, hallo ich,

ich habe das problem identifiziert:
es tritt immer dann auf, wenn die .exe im gleichen verzeichnis wie die .dll liegt.
lösung ist daher in den beiden zuvor genannten solutions zwei verschiedene output-dirs anzugeben.

falls jemand eine erklärung für das phänomen hat…her damit!

stefan

hallo stefan,

werds nachher mal testen. Die Solution beinhaltet zwei „Start Forms“ die auch beide mal eine MAIN Routine (heißen die so?) hatten. Hab das auch VS 2003 konveriert in (keine Ahnung).

Werd mich dann nochmal melden.

mfg

Drik.Pegasus

Hallo zusammen,

bei mir hat die Variante mit

[STAThread]

geholfen. Kann jemand erklären, was diese „Option“ macht?

mfg

Dirk.Pegasus