开发人员技术 | C#
一种面向对象的类型安全的编程语言,它起源于 C 语言系列,包括对面向组件的编程的支持。
public void Test1()
{
try
{
FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
folderBrowserDialog.Description = "请选择一个路径来保存下载";
if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
{
MessageBox.Show("选择目录:" + folderBrowserDialog.SelectedPath);
}
folderBrowserDialog.Dispose();
folderBrowserDialog = null;
}
catch (Exception ex)
{
}
}
using Microsoft.WindowsAPICodePack.Dialogs;
public void Test2()
{
try
{
using (var dialog = new CommonOpenFileDialog())
{
dialog.IsFolderPicker = true; // 设为文件夹选择模式
dialog.Title = "请选择一个路径来保存下载";
// 如果不设初始目录,可以省略这行
// dialog.InitialDirectory = "C:\\Users";
if (dialog.ShowDialog() == CommonFileDialogResult.Ok)
{
MessageBox.Show("选择目录:" + dialog.FileName);
}
}
}
catch (Exception ex)
{
// 记录或提示错误,不建议空处理
MessageBox.Show("打开文件夹选择框时出错:" + ex.Message);
}
}
经过测试得出结论,用户电脑自动更新后,大部分都是触发上方事件弹出对话框后,卡主然后闪退软件。
希望得到解决方案。
一种面向对象的类型安全的编程语言,它起源于 C 语言系列,包括对面向组件的编程的支持。
您好 @老江湖 ,
感谢您提供代码和测试结果。
FolderBrowserDialog 和 CommonOpenFileDialog 都依赖 Windows Shell。打开这些对话框时,系统可能会把杀毒软件、网盘同步工具或压缩软件等第三方 Shell 扩展加载到应用程序进程中。由于问题是在 Windows 自动更新后出现的,因此可能是某个 Shell 扩展与新版本不兼容,但目前还需要更多信息才能确认根本原因。
请先进行以下检查:
winver)以及最近安装的 KB 更新。代码方面也建议:
ShowDialog() 在 STA UI 线程中调用。ShowDialog(this)。catch 块,建议记录完整异常和调用堆栈。如果这是本机 Shell 组件或第三方扩展导致的崩溃,.NET 的 try/catch 可能无法捕获。作为临时解决方案,可以在独立的辅助进程中打开文件夹选择对话框,避免对话框崩溃时同时关闭主程序。
请先提供事件 ID 1000 中的“错误模块名称”,以便进一步定位问题。
谢谢.