J'ai cherché sur le Web et je ne suis malheureusement jamais tombé sur un problème aussi comme le mien, alors voici:
My C # WPF Application ne me montrera pas d'OpenFileDialogs ou de SafeFileDialogs. P>
bool? shown = ofd.ShowDialog();
7 Réponses :
Il existe un grand nombre de modes de défaillance possibles pour OpenFileDialog. En utilisant One expose votre application sur n'importe quelle extension Shell installée sur votre machine. Beaucoup d'entre eux peuvent être très déstabilisants, ce n'est pas si probable que l'auteur d'extension a vérifié s'il fonctionne correctement dans un processus WPF. P>
Attaquez ce problème en exécutant l'utilitaire Autoruns de Sysinternals. Cliquez sur l'onglet Explorateur et recherchez les groupes qui ont «Shelex» dans leur nom. Décochez tout ce qui n'a été publié pas par Microsoft. Redémarrez et vérifiez si le problème est résolu. P>
Merci pour le conseil! Malheureusement, comme vous l'avez souligné, il y a un grand nombre de modes de défaillance possibles et la désactivation de toutes les extensions de shell tiers n'était pas celle que j'ai rencontrée. Même après avoir tout retourné et redémarrer le problème persiste. Aussi, laissez-moi indiquer que les dialogues fonctionnent dans un autre projet en même temps - sans faille. J'aimerais vous voter, cependant, comme cela me semble assez utile. Malheureusement, je ne peux pas faire ça jusqu'à ce que j'ai rassemblé un peu plus de représentant: P
Cela m'est arrivé récemment. Le problème était que la méthode principale code> n'a été marquée comme un
stathread code> qui provoquera la méthode
showdialog code> WPF OpenFileDialog '/ code> pour bloquer indéfiniment.
[STAThread]
static void Main(string[] args)
{
var openFileDialog = new OpenFileDialog();
var result = openFileDialog.ShowDialog();
}
En disant que cela vous bloquera pour dire que cela ne reviendra pas? Parce que ce n'est clairement pas ce qui se passe à ma fin. Au contraire, il retourne immédiatement, indiquant aucune boîte de dialogue n'a été affichée, mais cela ne fait que sur des occasions aléatoires.
Dans la demande de console, il est nécessaire d'avoir Stathread pour que la boîte de dialogue fonctionne.
Mais WPF est différent. Et le code semble être en cours d'exécution sur le fil principal également.
J'utilise Xna Game Studio au lieu de WPF et cela a résolu mon problème :).
Je ne sais pas si vous l'avez compris ou non, mais j'ai récemment eu ce même problème. Dans mon cas, le problème était que ma demande n'avait pas créé une fenêtre existante.
Mon code a regardé quelque chose comme ça. P>
private void Application_Startup(object sender, StartupEventArgs e) { string startupFileName = String.Empty(); if ( startupMode = StartupMode.Load ) { // open existing file OpenFileDialog openDlg = new OpenFileDialog(); if (openDlg.ShowDialog() != true) return; startupFileName = openDlg.FileName; } else { // create a new file SaveFileDialog saveDlg = new SaveFileDialog(); if (saveDlg.ShowDialog() != true) return; startupFileName = saveDlg.FileName; } // show my main application window MainWindow myMainWindow = new MainWindow(startupFileName); myMainWindow.Show(); }
Cela ne semble pas être le problème de mon application, que ce soit, car il est garanti d'avoir une fenêtre établie lors de la création de la boîte de dialogue. L'utilisateur doit cliquer sur un bouton pour le faire apparaître, de sorte qu'il a b> une fenêtre. Ou avez-je mal compris votre réponse?
Dans l'application de la console, vous aurez besoin d'un appartement Stathread pour que cela fonctionne. Mais WPF est différent. P>
Je vous conseillerais d'utiliser les boîtes de dialogue de fichiers qu'après la démarrage de la fenêtre et le fil principal commence à fonctionner. Essayez de montrer votre boîte de dialogue dans certains événements Mainwindow de son cycle de vie. p>
Je ressens un problème similaire et que Garrett a suggéré, c'est un problème de STA. J'ai beaucoup de difficulté avec des problèmes de STA au cours des derniers mois, car je dois lancer des écrans à partir d'une fenêtre de console (objectifs de test) - cela signifie que le fil d'appel n'est pas STA, mais peut être simulé dans quelque chose comme ce qui suit: Illicité, il n'a pas fonctionné pour moi pour marquer la méthode de Stathread, je devais lancer l'opération dans un fil marqué comme STA. P> P>
C'est exactement ce qui m'a aidé, merci! Et oui, juste pour marquer la méthode avec la propriété Stathread n'était pas suffisant.
Je sais que cette question a été posée en 2010 et la réponse directe n'était pas celle que je vais fournir, mais comme aujourd'hui, il existe une autre raison d'avoir ce problème. P>
J'ai récemment installé mon logiciel sur une machine virtuelle fraîche qui fonctionne parfaitement sur mon ordinateur de développement et de nombreuses autres machines d'essai. P>
La machine virtuelle forte> Windows 7 forte> était trop fraîche et n'a pas eu la Une fois installé, je pourrais utiliser les boîtes de dialogue de fichiers ouverts Sand Enregistrer. P>
J'espère que cela aidera quelqu'un d'autre. P>
parfois [stambread] code> ne fonctionne pas, vous pouvez essayer ceci:
En tant que point de référence à ceux qui répondent, cela semble être
Microsoft.win32.openfiledialog code> et non l'équivalent
system.windows.forms.openfiledialog code>.
Oui, c'est vrai - merci pour la clarification!
C'est une question ancienne, mais je ressens le même phénomène avec un complément VSTo pour Excel: "Parfois, ça marche, parfois ce n'est pas le cas." Il est totalement imprévisible. Malheureusement, ni expérimenter des fils STA ni la création de formes (factices) ou des fenêtres WPF avant d'appeler OpenFiledialog.showdialog () (comme suggéré ci-dessous) empêche ce comportement.