C#, WPF - OpenFileDialog n'apparaît pas
J'ai été à la recherche vers le haut et vers le bas sur le web et, malheureusement, n'est jamais venu à l'échelle d'une question tout à fait comme le mien, voilà:
Mon C# WPF application ne va pas me montrer aucun OpenFileDialogs ou 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)
{
//...
}
}
Exacte de ce code ne dans un cas, exactement ce qu'il est censé faire, et à peine cinq minutes plus tard, je peux cliquer sur le bouton tout ce que je veux, rien ne se passe, mais le pointeur de la souris se transforme en un petit indicateur occupé et puis plus rien. Je peux étape par le biais de la méthode ou de faire quelque chose comme ceci
bool? shown = ofd.ShowDialog();
Mais n'importe quoi, la boîte de dialogue de ne pas s'afficher. Bien sûr, la montre sera fausse dans ce cas. J'ai perdu une heure et demie à la recherche d'hier et à droite quand j'ai arrêté j'ai essayé de nouveau et tout d'un coup, il a travaillé. Parfois ça marche, parfois ça ne marche pas. Mais il semble être spécifique au projet parce que je peux coller le même code dans un nouveau projet et il fonctionne comme il est censé le faire. Aussi, c'est la seule chose à propos de ce projet qui semble louche. Tout le reste fonctionne comme prévu.
A quelqu'un ici jamais connu quelque chose de semblable, et donc une idée de ce que sur la terre je pourrais faire?
Toute aide weould être très apprécié.
Microsoft.Win32.OpenFileDialog
et pas l'équivalent System.Windows.Forms.OpenFileDialog
.Oui, c'est exact, Merci pour la précision!
C'est une vieille question, mais je suis en train de vivre le même phénomène avec une VSTO add-in pour Excel: "Parfois ça marche, parfois ça ne marche pas." Il est totalement imprévisible. Malheureusement, ni l'expérimentation avec les threads STA, ni de la création (dummy) forms ou WPF windows avant d'appeler OpenFileDialog.ShowDialog() (comme indiqué ci-dessous) empêche ce comportement.
OriginalL'auteur Koarl | 2010-02-04
Vous devez vous connecter pour publier un commentaire.
Il y a un grand nombre de modes de défaillance pour OpenFileDialog. À l'aide de l'un expose de votre application à n'importe quel shell extension qui est installé sur votre ordinateur. Beaucoup de ce qui peut être très déstabilisant, il est peu probable que l'auteur de l'extension a vérifié si il fonctionne correctement dans un WPF processus.
S'attaquer à ce problème en exécutant SysInternals' AutoRuns utilitaire. Cliquez sur l'onglet Explorateur et regardez pour les groupes qui ont "ShellEx" dans leur nom. Décochez tout ce qui n'a pas été publié par Microsoft. Redémarrez et vérifiez si le problème est résolu.
OriginalL'auteur Hans Passant
Ce qui m'est arrivé récemment. Le problème était le
Main
méthode n'était pas marqué commeSTAThread
qui sera la cause de la WPF OpenFileDialog deShowDialog
méthode pour bloquer indéfiniment.ne sera jamais sortir ou lever une exception, alors que
fonctionnera comme prévu.
Dans la Console de l'application, il est nécessaire d'avoir STAThread pour la boîte de Dialogue de travailler.
Mais WPF est différent. Et le code semble être en cours d'exécution sur le thread principal.
Je suis en utilisant XNA game studio au lieu de WPF et cela a résolu mon problème :).
OriginalL'auteur Garrett
Je suis confronté à un problème similaire, et que Garrett a suggéré, c'est un STA question. J'ai été aux prises avec des questions concernant le personnel, beaucoup dans le passé quelques mois, car j'ai besoin de lancer des écrans à partir d'une fenêtre de console (à des fins de Test), ce qui signifie que le thread appelant n'est pas personnel, mais peut être simulé dans quelque chose comme ce qui suit:
Unforunately, il ne fonctionne pas pour moi de marquer la méthode que STAThread, j'ai dû lancer l'opération dans un thread marqués de STA.
OriginalL'auteur Johan Aspeling
Je sais que cette question a été poser en 2010 et la réponse directe n'était pas celle que je vais vous donner, mais comme date d'aujourd'hui, il existe une autre raison à ce problème.
J'ai récemment installé mon logiciel sur une nouvelle machine virtuelle qui fonctionne parfaitement sur mon dev ordinateur et de nombreux autres machines d'essais.
La Windows 7 de la machine virtuelle était trop fraîche et n'ont pas la SP1 KB976932 installé.
Une fois installé, je pourrais utiliser le sable ouvert boîtes de dialogue enregistrer le fichier.
J'espère que cela aidera quelqu'un d'autre.
OriginalL'auteur Abyte0
Vous ne savez pas si vous avez compris ou pas, mais j'ai récemment eu ce même problème. Dans mon cas, le problème était que ma demande n'avait pas établi une fenêtre existante.
Mon code cherché quelque chose comme ça.
L'OpenFileDialog (ou SaveFileDialog) serait immédiatement retourner false, sans les montrer parce que ma demande n'avait pas de fenêtre pour elle de s'attacher à.
Ma solution a été de mettre l'ouvrir/enregistrer un code après, j'ai créé ma fenêtre principale, mais avant, j'ai appelé la méthode Show ().
OriginalL'auteur TomB
Dans l'application de console, vous aurez besoin STAThread appartement pour qu'il fonctionne.
Mais WPF est différent.
Je vous conseille de vous en utilisant les boîtes de dialogue Fichier seulement après que la fenêtre commence et le Thread Principal commence à travailler.
Essayez de montrer votre boîte de dialogue, dans certains MainWindow événement de son cycle de vie.
OriginalL'auteur Ivan Kirkorau
parfois
[staThread]
ne fonctionne pas, vous pouvez essayer ceci:OriginalL'auteur Duo.Liu