C#, WPF - OpenFileDialog wird nicht angezeigt
Ich habe die Suche rauf und runter im web und leider kam nie über ein Problem, ganz wie mir, so geht ' s:
Mein C# - WPF-Anwendung nicht zeigen, dass mich keine OpenFileDialogs oder SafeFileDialogs.
private void btnBrowseNet_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.CheckPathExists = true;
ofd.Multiselect = false;
ofd.Title = "Open Network Configuration Batch file...";
ofd.ValidateNames = true;
ofd.Filter = "Comma Seperated Value Files|*.csv";
if (ofd.ShowDialog() == true)
{
//...
}
}
Genau diesem code in einem Anlass genau das, was es tun soll und kaum fünf Minuten später kann ich klicken Sie auf die Schaltfläche alles was ich will, nichts passiert, aber der Mauszeiger verwandelt sich in ein wenig busy-Anzeige und dann nichts mehr. Ich kann Schritt für Schritt durch die Methode oder so etwas
bool? shown = ofd.ShowDialog();
Aber egal, was der dialog nicht angezeigt. Natürlich, gezeigt wird falsch in diesem Fall. Ich vergeudete anderthalb Stunden Suche gestern und rechts, wenn ich aussteige habe ich es wieder versucht und plötzlich funktionierte es. Manchmal klappt es, manchmal nicht. Aber es scheint ein Projekt zu bestimmten denn ich kann fügen Sie den gleichen code in ein neues Projekt und es funktioniert wie es soll. Auch, das ist das einzige, was über das Projekt, das scheint fischig. Alles andere funktioniert wie vorgesehen.
Hat jemand hier schon einmal erlebt etwas ähnliches, und damit eine Vorstellung von dem, was auf der Erde ich tun könnte?
Jede Hilfe weould sehr geschätzt werden.
- Als Bezugspunkt für die Beantwortung, diese erscheint
Microsoft.Win32.OpenFileDialog
und nicht das äquivalentSystem.Windows.Forms.OpenFileDialog
. - Ja, das ist richtig - Danke für die Klarstellung!
- Es ist eine alte Frage, aber ich erlebe das gleiche Phänomen mit einem VSTO-add-in für Excel: "Manchmal klappt es, manchmal nicht." Es ist völlig unberechenbar. Leider, weder das Experimentieren mit STA-threads noch erstellen (dummy) forms oder WPF-windows vor dem Aufruf OpenFileDialog.ShowDialog() (wie unten vorgeschlagen) verhindert dieses Verhalten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es eine große Anzahl von möglichen ausfallarten für OpenFileDialog. Mit einer macht, die Ihre app einfach nur über ein shell-Erweiterung, die auf Ihrem Computer installiert. Viele von denen können sehr destabilisieren, das ist es nicht wahrscheinlich, dass der Autor der Erweiterung hat überprüft, ob es korrekt funktioniert in einer WPF-Prozess.
Bewältigung dieses Problems durch ausführen von SysInternals' AutoRuns Dienstprogramm. Klicken Sie auf der Registerkarte "Explorer" und suchen Sie nach den Gruppen "ShellEx" in Ihrem Namen. Deaktivieren Sie alles, was nicht von Microsoft veröffentlicht. Neustart und überprüfen ob das problem gelöst ist.
Diese mir kürzlich passiert ist. Das problem war die
Main
Methode war nicht gekennzeichnet alsSTAThread
wodurch die WPF OpenFileDialog istShowDialog
Methode auf unbestimmte Zeit blockiert.wird nie beendet oder eine Ausnahme werfen, in der Erwägung, dass
funktioniert wie erwartet.
Erlebe ich ein ähnliches problem, und als Garrett vorgeschlagen, es ist ein STA-Problem. Ich habe Schwierigkeiten mit Personalfragen eine Menge in den letzten paar Monaten, als ich brauche, um zu starten screens von der Konsole-Fenster (zu Testzwecken) - das bedeutet, dass der aufrufende thread nicht STA, kann aber simuliert werden, in etwa wie folgt aus:
Nur leider, es hat nicht funktioniert für mich, markieren Sie einfach die Methode, wie STAThread, ich hatte zum starten den Betrieb in einem thread markiert als STA.
Ich weiß, diese Frage wurde Fragen im Jahr 2010 und die direkte Antwort war nicht die, die ich werde aber heute gibt es einen weiteren Grund für dieses problem.
Vor kurzem habe ich meine software installiert auf einer frischen virtuellen Maschine, die perfekt funktioniert auf meinem dev-Rechner und viele andere testing machines.
Den Windows 7 virtuellen Maschine war zu frisch und haben nicht den SP1 KB976932 installiert.
Einmal installiert, die ich verwenden könnte, die offene sand-Datei speichern Dialoge.
Ich hoffe, dass dies jemand anderes helfen.
Nicht sicher, ob Sie es herausgefunden hat oder nicht, aber ich hatte vor kurzem das gleiche problem. In meinem Fall war das problem, dass meine Anwendung noch nicht gegründet worden, um ein vorhandenes Fenster.
Mein code sah so etwas wie dieses.
OpenFileDialog (oder SaveFileDialog) sofort false zurückgeben, ohne zu zeigen, weil meine Anwendung hatte keine Fenster, es hängt sich auf.
Meine Lösung war, den öffnen - /speichern-code, nachdem ich meine Haupt-Fenster, aber vorher rief ich die Show () - Methode.
In der Konsole-Anwendung, die Sie benötigen STAThread-appartment für Sie zu arbeiten.
Aber WPF ist anders.
Ich würde Ihnen raten, mit dem Datei-Dialoge erst, nachdem Sie das Fenster gestartet und der Main-Thread beginnt zu arbeiten.
Versuchen, den dialog in einigen MainWindow-Ereignis des Lebenszyklus.
irgendwann
[staThread]
nicht funktioniert, können Sie versuchen, diese: