Hallo,
Ich habe ein Problem mit den Threads. Für eine vorhandene aus xy Projekten bestehende Projektmappe muss ich einen neuen Projekt schreiben. Mein Projekt muss als Klassenbibliothek angelegt werden (also nicht Windows-Forms-Anwendung, obwohl es eine GUI hat). Ich bekomme von dem Prozessor Aufmerksamkeit durch eine init-methode und muss Einstellungen durch die GUI vornehmen bis ich dann die init-methode loslassen kann. Ich habe mir eine Warteschleife gebastelt und die GUI in einen Thread gepackt.
Soweit ich aber versuche in der GUI, die in dem Thread gestartet ist, OpenFileDialog zu öffnen, bekomme ich Exception (bzw. eine Anmerkung, die bei der Ausführung außerhalb des Debug-Modus nicht auftreten sollte, wie es da steht). Da steht dass der Thread, der das Dialog ausführt, eine STAThread Markierung haben muss. Genauer:
Wenn ich nun keine Hauptfunktion habe, wie soll ich vorgehen?
Ich habe versucht den OpenFileDialog in separaten Thead auszulagern, war aber doofe Idee... kam dasselbe raus.
Hat jemand eine Idee?
Ich habe ein Problem mit den Threads. Für eine vorhandene aus xy Projekten bestehende Projektmappe muss ich einen neuen Projekt schreiben. Mein Projekt muss als Klassenbibliothek angelegt werden (also nicht Windows-Forms-Anwendung, obwohl es eine GUI hat). Ich bekomme von dem Prozessor Aufmerksamkeit durch eine init-methode und muss Einstellungen durch die GUI vornehmen bis ich dann die init-methode loslassen kann. Ich habe mir eine Warteschleife gebastelt und die GUI in einen Thread gepackt.
Soweit ich aber versuche in der GUI, die in dem Thread gestartet ist, OpenFileDialog zu öffnen, bekomme ich Exception (bzw. eine Anmerkung, die bei der Ausführung außerhalb des Debug-Modus nicht auftreten sollte, wie es da steht). Da steht dass der Thread, der das Dialog ausführt, eine STAThread Markierung haben muss. Genauer:
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.
Quellcode
- OpenFileDialog gvDialog = new OpenFileDialog();
- gvDialog.Multiselect = false;
- gvDialog.Filter = "GV-Datei|*.gv";
- if (gvDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { //tritt hier auf
- txt_adf_path.Text = gvDialog.FileName.Replace("\\", "/");
- }
- if (txt_adf_path.Text != "" && txt_adj_path.Text != "") {
- cmd_visualize.Enabled = true;
- }
Wenn ich nun keine Hauptfunktion habe, wie soll ich vorgehen?
Ich habe versucht den OpenFileDialog in separaten Thead auszulagern, war aber doofe Idee... kam dasselbe raus.
Hat jemand eine Idee?