I have been searching up and down the web and unfortunately never came across an issue quite like mine, so here goes:
My C# WPF application won't show me no OpenFileDialogs or 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)
{
//...
}
}
This exact code does in one occasion exactly what it is supposed to do and hardly five minutes later I can click the button all I want, nothing happens but the mouse pointer turning into a little busy-indicator and then nothing. I can step through the method or do something like this
bool? shown = ofd.ShowDialog();
But no matter what, the dialog won't show. Of course, shown will be false in that case. I wasted one and a half hours searching yesterday and right when I quit I tried it again and all of a sudden it worked. Sometimes it works, sometimes it doesn't. But it seems to be project specific because I can paste the same code into a new project and it works like it is supposed to do. Also, that's the only thing about the project that seems fishy. Everything else works as intended.
Has anyone on here ever experienced something similar and thus an idea of what on earth I could do? Any help weould be highly appreciated.
Not sure if you figured it out or not, but I recently had this same problem. In my case, the problem was that my application hadn't established an existing window.
My code looked something like this.
The OpenFileDialog (or SaveFileDialog) would immediately return false without showing because my application had no window for it to attach itself to.
My solution was to put the open/save code after I created my main window but before I called the Show() method.
This happened to me recently. The problem was the
Main
method wasn't marked as anSTAThread
which will cause the WPF OpenFileDialog'sShowDialog
method to block indefinitely.will never exit or throw an exception, whereas
will work as expected.
I am experiencing a similar problem, and as Garrett suggested, it is an STA issue. I have been struggling with STA issues a lot in the past few months, as I need to launch screens from a console window (Testing purposes) - this means that the calling thread is not STA, but can be simulated in something like the following:
Unforunately, it did not work for me to just mark the method as STAThread, I had to launch the operation in a thread marked as STA.
There are a large number of possible failure modes for OpenFileDialog. Using one exposes your app to just about any shell extension that's installed on your machine. Many of which can be very destabilizing, it isn't that likely that the extension author has checked if it works properly in a WPF process.
Tackle this problem by running SysInternals' AutoRuns utility. Click the Explorer tab and look for the groups that have "ShellEx" in their name. Uncheck anything that wasn't published by Microsoft. Reboot and check if the problem is solved.
In the console application you will need STAThread appartment for it to work. But WPF is different.
I would advise you using the File Dialogs only after the window starts and the Main Thread starts working. Try showing your dialog in some MainWindow event of its lifecycle.
I know this question was ask in 2010 and the direct answer wasn't the one I'll provide but as today date there is an other reason to have this problem.
I recently installed my software on a fresh virtual machine which works perfectly on my dev computer and many other testing machines.
The Windows 7 virtual machine was too fresh and did not have the SP1 KB976932 installed.
Once installed, I could use the open sand save file dialogs.
I hope this will help someone else.