Fragensteller
OpenFileDialog troubles bei/mit den exeptions

Allgemeine Diskussion
-
hallo ...
ich arbeite an einem kleinem Projekt um etwas übung zu bekommen... dabei bin ich jetzt an den punkt gekommen an dem ich über die OpenFileDialog´s gestolpert bin und würde sie gerne verwenden (erster test) jetzt hab ich das problem dass ich eine unterbrechung bekomme mit einer nicht behandelte ausnahme...
kann mir bitt jemand helfen da ich leider nicht mehr weiter weiss code und Fehlermeldung siehe unten....
Weitere infos ich lese dabei den Pfad und den Dateinamen aus da diese in späterer folge noch benötigt werden....
OpenFileDialog Dialog1 = new OpenFileDialog(); Dialog1.Title = "Open "; Dialog1.Filter = "(*.exe)|*.exe"; Dialog1.InitialDirectory = @"C:\"; Dialog1.RestoreDirectory = true; if (Dialog1.ShowDialog() == DialogResult.OK)//Hier ist der Break { string Name1 = Dialog1.SafeFileName; cmdTB2.Text = (Dialog1.FileName.ToString()); cmdTB1.Text = (Name1); }
Fehlermeldung:
Eine nicht behandelte Ausnahme des Typs "System.Threading.ThreadStateException" ist in System.Windows.Forms.dll aufgetreten.
Zusätzliche Informationen: 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.- Typ geändert Ciprian Bogdan Montag, 17. März 2014 13:04 keine Rückmeldung des Fragestellenden
Alle Antworten
-
Hallo,
anhand der Fehlermeldung kann ich erkennen, das du den OFD aus einem anderen Thread heraus öffnen möchtest.Besser wäre es, wenn du den Dialog direkt von der Form aus anzeigen würdest. Ansonsten kannst du dem Thread aber auch das STA-Attrobut geben.
Thread t = new Thread(...); t.SetApartmentState(ApartmentState.STA); t.Start();
Du kannst den OFD aber auch im 2. Thread synchron zur Form ausführen. Nutze dazu die Invoke-Methode:this.Invoke(new Action(() => { //Ab jetzt ist alles synchron. DIe Variablen kannst du aber schoin außerhalb deklariert haben und dann von hieraus zugreifen if (Dialog1.ShowDialog() == DialogResult.OK)//Hier ist der Break { string Name1 = Dialog1.SafeFileName; cmdTB2.Text = (Dialog1.FileName.ToString()); cmdTB1.Text = (Name1); } }));
Der Fehler tritt auf, weil du versuchst ein Fenster in einem Nicht-STA-Thread zu erstellen. STA (Single Thread Apartment) ist ein COM-Konzept, mit dem Controls und Forms behandelt werden.
Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke. -
Hi,
Hat Dir die Antwort von Tom geholfen ? Wenn ja - bitte markiere diese "als Antwort".
Danke und Gruß,
Ciprian
Ciprian Bogdan, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip„Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
-
*****************************************************************************************************
Dieser Thread wurde mangels weiterer Beteiligung des Fragestellenden ohne bestätigte Lösung abgeschlossen.
Neue Rückfragen oder Ergänzungen zu diesem Thread bleiben weiterhin möglich.
*****************************************************************************************************Ciprian Bogdan, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip„Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.