【问题标题】:FolderBrowserDialog crashes the applicationFolderBrowserDialog 使应用程序崩溃
【发布时间】:2012-02-12 09:38:15
【问题描述】:

每当我调用 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 会起作用吗?

【问题讨论】:

  • “我正在使用以前对我有用的代码,所以它不能是代码”......我会学会对你的代码不那么自满。大多数错误是由于“代码”造成的。如果你确定这不是你的代码,那你就发错地方了!
  • 这段代码是否运行在 UI 线程中?如果不是,那么确保它是一个想法。
  • Windows 应用程序事件日志中将提供有关崩溃性质的更多信息。您需要提供。
  • 在catch (Exception ex) {}中没有捕捉到任何异常?
  • 当我们这样做的时候,FolderBrowserDialog 实现了IDisposable,所以你的fbd 的生命周期应该在using 构造中,就像using (FolderBrowserDialog fbd = new FolderBrowserDialog()) { ... } 一样

标签: c# windows-7 folderbrowserdialog


【解决方案1】:

尝试将此添加到您的应用程序中(最好在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);
            }                
        };

【讨论】:

  • 此代码在某些环境下会失败(特别是如果可执行文件对工作目录没有写权限)
  • 我会试试的,我目前也在尝试重新安装.net 4,以防万一,但几乎完成了......
  • 所以我做了,我发现我必须在 64 位中调试才能让它工作。
【解决方案2】:

我在FolderBrowserDialog 上遇到了同样的问题,并找到了source of evilness。评论/取消评论[STAThread],看看有什么不同:

using System;
using System.Windows.Forms;

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

【讨论】:

  • 谢谢!如果没有这个答案,我就无法发现问题。在我的情况下,调用 FolderBrowserDialog 会无限期地卡住并且什么都不做。
【解决方案3】:

关于 FolderBrowserDialog、SaveFileDialog、OpenFileDialog 的另一件事是,如果您在可执行文件属性的兼容性选项卡上“禁用视觉主题”,它们将不起作用。

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2017-11-10
      • 2012-08-18
      • 2014-03-18
      • 2014-11-14
      • 2018-12-05
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多