C#,WPF - OpenFileDialog没有出现

Koa*_*arl 8 c# wpf openfiledialog savefiledialog

我一直在网上搜索,不幸的是从未遇到过像我一样的问题,所以这里有:

我的C#WPF应用程序不会向我显示OpenFileDialogs或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)
        {
           //...
        }
    }
Run Code Online (Sandbox Code Playgroud)

这个确切的代码在一个场合完全符合它应该做的事情,几乎五分钟之后我可以点击按钮我想要的任何事情都没有发生但是鼠标指针变成了一个忙碌的指示器然后什么都没有.我可以单步执行该方法或执行此类操作

bool? shown = ofd.ShowDialog();
Run Code Online (Sandbox Code Playgroud)

但无论如何,对话框都不会显示.当然,在这种情况下显示将是错误的.我昨天浪费了一个半小时的搜索,当我退出时,我再次尝试了它,突然间它起作用了.有时候它有效,有时则不然.但它似乎是项目特定的,因为我可以将相同的代码粘贴到一个新项目中,它的工作方式就像它应该做的那样.此外,这是该项目唯一似乎有点可疑的事情.其他一切都按预期工作.

有没有人在这里经历过类似的事情,从而了解我到底能做什么?任何帮助都应该受到高度赞赏.

Han*_*ant 8

OpenFileDialog存在大量可能的故障模式.使用一个可以将您的应用程序暴露给您计算机上安装的任何外壳扩展.其中许多可能非常不稳定,扩展作者不太可能检查它是否在WPF进程中正常工作.

通过运行SysInternals的AutoRuns实用程序解决此问题.单击"资源管理器"选项卡,然后查找名称中包含"ShellEx"的组.取消选中Microsoft未发布的任何内容.重新启动并检查问题是否已解决.


小智 6

这最近发生在我身上.问题是该Main方法未标记为STAThread会导致WPF OpenFileDialog的ShowDialog方法无限期阻塞.

static void Main(string[] args)
{
    var openFileDialog = new OpenFileDialog();
    var result = openFileDialog.ShowDialog();
}
Run Code Online (Sandbox Code Playgroud)

永远不会退出或抛出异常,而

[STAThread]    
static void Main(string[] args)
{
    var openFileDialog = new OpenFileDialog();
    var result = openFileDialog.ShowDialog();
}
Run Code Online (Sandbox Code Playgroud)

将按预期工作.