FolderBrowserDialog导致应用程序崩溃

3
每当我调用folderbrowserdialog.showDialog()方法时,我的应用程序就会崩溃。 我正在使用以前可行的代码,所以它绝对不可能是代码的问题。
try
{
    FolderBrowserDialog fbd = new FolderBrowserDialog();
    fbd.RootFolder = Environment.SpecialFolder.Desktop;
    if (fbd.ShowDialog() == DialogResult.OK)
    {
        //  this.Minecraft.Text = fbd.SelectedPath;
    }
}
catch
{
}

它没有抛出任何错误,也没有异常,只是弹出了一个小圆圈,然后应用程序就消失了,我之前在另一个.NET应用程序中也注意到了这个问题!

顺便问一下:重新安装.NET 4会起作用吗?


1
我正在使用之前对我有效的代码,所以它肯定不是代码的问题。你应该学会对自己的代码更加谨慎。大多数错误都是由于“代码”引起的。如果你确定不是你的代码出了问题,那么你就发错地方了! - spender
这段代码是否在UI线程上运行?如果不是,最好确保它是运行在UI线程上。 - spender
Windows 应用程序事件日志中将有关于崩溃性质的更多信息。您需要提供它。 - spender
1
在 catch (Exception ex) {} 中没有捕获任何异常吗? - pistipanko
你是在Visual Studio中运行吗?你尝试以管理员身份运行它了吗?我在Windows 7上遇到过一些有趣的问题。 - ChrisBD
1
顺便提一下,FolderBrowserDialog 实现了 IDisposable 接口,因此您的 fbd 生命周期应该在 using 结构中,如下所示:using (FolderBrowserDialog fbd = new FolderBrowserDialog()) { ... } - Jesse C. Slicer
4个回答

4

尝试将以下内容添加到您的应用程序中(最好是在Main()方法的开头)。当您达到冻结点时,请查看exceptions.txt文件是否记录了任何异常。

        AppDomain.CurrentDomain.FirstChanceException += (sender, e) =>
        {
            if ((e == null) || (e.Exception == null))
            {
                return;
            }

            using (var sw = File.AppendText(@".\exceptions.txt")) 
            {
                sw.WriteLine(e.ExceptionObject);
            }                
        };

        AppDomain.CurrentDomain.UnhandledException += (sender, e) =>
        {
            if ((e == null) || (e.ExceptionObject == null))
            {
                return;
            }

            using (var sw = File.AppendText(@".\exceptions.txt")) 
            {
                sw.WriteLine(e.ExceptionObject);
            }                
        };

这段代码在某些环境中会失败(特别是当可执行文件对工作目录没有写权限时)。 - spender
我会尝试一下,我目前也在尝试重新安装 .net 4,以防万一,但快要完成了... - killie01
所以我这样做了,我发现我必须在64位调试才能让它工作。 - killie01

3

我之前遇到了和FolderBrowserDialog有关的问题,后来在这里找到了问题的根源。尝试注释或取消注释[STAThread],你会发现不同之处:

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    static class Program
    {
        //[STAThread]
        static void Main()
        {
            new FolderBrowserDialog().ShowDialog();
        }
    }
}

谢谢!如果没有这个答案,我就无法发现问题了。在我的情况下,调用FolderBrowserDialog会无限期地卡住并且什么也不做。 - Jani

0
关于FolderBrowserDialog、SaveFileDialog和OpenFileDialog,你需要知道的另一件事是,如果在可执行文件属性的兼容性选项卡上“禁用可视化主题”,它们将无法工作。

0
希望这能帮助到某些人 - 我实际上遇到了这个问题,结果发现我不小心给启动FolderBrowserDialog的按钮分配了一个DialogResult!因此,每当代码执行完成时,它都会将“Cancel”的DialogResult返回给CLR并终止我的程序。在Visual Studio中检查您已分配以打开对话框的按钮的“DialogResult”属性 - 确保将其设置为“None”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接