C #, WPF - OpenFileDialog wird nicht angezeigt

8

Ich habe das Internet auf und ab durchsucht und bin leider nie auf ein Problem gestoßen, das ganz meiner Ansicht ist, also hier:

Meine C # -WPF-Anwendung zeigt mir keine OpenFileDialogs oder SafeFileDialogs.

%Vor%

Genau dieser Code tut genau das, was er tun soll, und kaum fünf Minuten später kann ich auf den Knopf klicken, alles was ich will, nichts passiert, aber der Mauszeiger verwandelt sich in einen kleinen Busy-Indikator und dann nichts. Ich kann durch die Methode gehen oder so etwas tun

%Vor%

Aber egal was passiert, der Dialog wird nicht angezeigt. Natürlich wird in diesem Fall gezeigt, dass es falsch ist. Ich habe anderthalb Stunden damit verbracht, gestern und rechts zu suchen, als ich aufhörte. Ich versuchte es noch einmal und plötzlich funktionierte es. Manchmal funktioniert es, manchmal nicht. Aber es scheint projektspezifisch zu sein, weil ich denselben Code in ein neues Projekt einfügen kann und es so funktioniert, wie es soll. Das ist auch das Einzige an dem Projekt, das fischig wirkt. Alles andere funktioniert wie vorgesehen.

Hat irgendjemand hier jemals etwas Ähnliches erlebt und somit eine Vorstellung davon, was in aller Welt ich tun könnte? Jede Hilfe sollte sehr geschätzt werden.

    
Koarl 04.02.2010, 16:18
quelle

7 Antworten

7

Es gibt eine große Anzahl von möglichen Fehlermodi für OpenFileDialog. Wenn Sie eines verwenden, wird Ihre App fast jeder Shell-Erweiterung zugänglich gemacht, die auf Ihrem Computer installiert ist. Viele davon können sehr destabilisierend sein. Es ist nicht so wahrscheinlich, dass der Autor der Erweiterung überprüft hat, ob er in einem WPF-Prozess richtig funktioniert.

Beheben Sie dieses Problem, indem Sie das AutoRuns-Dienstprogramm von SysInternals ausführen. Klicken Sie auf die Registerkarte Explorer, und suchen Sie nach den Gruppen, deren Name "ShellEx" enthält. Deaktivieren Sie alles, was nicht von Microsoft veröffentlicht wurde. Starten Sie neu und prüfen Sie, ob das Problem gelöst ist.

    
Hans Passant 04.02.2010 17:00
quelle
6

Das ist mir kürzlich passiert. Das Problem war, dass die Methode Main nicht als STAThread markiert war, was dazu führt, dass die Methode ShowDialog des WPF OpenFileDialogs unendlich lange blockiert.

%Vor%

wird niemals eine Ausnahme beenden oder auslösen, während

%Vor%

funktioniert wie erwartet.

    
Garrett 16.09.2011 14:48
quelle
1

Ich erlebe ein ähnliches Problem, und wie Garrett vorgeschlagen, es ist ein STA Problem. Ich habe zu kämpfen worden mit STA viel in den letzten Monaten gibt, wie ich Bildschirme von einem Konsolenfenster starten muß (zu Testzwecken) - dies bedeutet, dass der aufrufende Thread nicht STA ist, kann aber in etwa wie folgt simuliert werden:

%Vor%

Unforunately, es hat nicht funktioniert für mich nur die Methode als STAThread markieren, ich die Operation in einem Thread als STA markiert gestartet hatte.

    
Johan Aspeling 28.04.2016 13:40
quelle
1

Ich weiß, dass diese Frage im Jahr 2010 gestellt wurde und die direkte Antwort war nicht die, die ich liefern werde, aber als das heutige Datum gibt es einen anderen Grund, dieses Problem zu haben.

Ich habe meine Software kürzlich auf einer neuen virtuellen Maschine installiert, die perfekt auf meinem Entwicklungscomputer und vielen anderen Testmaschinen funktioniert.

Die virtuelle Maschine Windows 7 war zu frisch und hatte den SP1 KB976932 nicht installiert.

Nach der Installation konnte ich die Dialogfelder zum Speichern offener Dateien verwenden.

Ich hoffe, dass dies jemand anderem hilft.

    
Abyte0 02.03.2017 18:58
quelle
0

Nicht sicher, ob Sie es herausgefunden haben oder nicht, aber ich hatte kürzlich das gleiche Problem. In meinem Fall bestand das Problem darin, dass meine Anwendung kein vorhandenes Fenster eingerichtet hatte.

Mein Code sah ungefähr so ​​aus.

%Vor%

Der OpenFileDialog (oder SaveFileDialog) würde sofort false zurückgeben, ohne zu zeigen, weil meine Anwendung kein Fenster hatte, an das sie sich anhängen könnte.

Meine Lösung bestand darin, den Code zum Öffnen / Speichern zu speichern, nachdem ich mein Hauptfenster erstellt hatte, aber bevor ich die Show () -Methode aufgerufen habe.

    
TomB 20.09.2011 17:18
quelle
0

In der Konsolenanwendung benötigen Sie die STAThread-Appliance, damit sie funktioniert. Aber WPF ist anders.

Ich würde Ihnen raten, die Datei-Dialoge nur zu verwenden, nachdem das Fenster gestartet wurde und der Haupt-Thread zu arbeiten beginnt. Versuchen Sie, Ihren Dialog in einem MainWindow-Ereignis seines Lebenszyklus anzuzeigen.

    
Ivan Kirkorau 11.09.2012 14:02
quelle
0

irgendwann [staThread] funktioniert nicht, Sie können dies versuchen:

%Vor%     
Lynn.Liu 30.03.2018 03:05
quelle