c# - 调用 OpenFileDialog.ShowDialog() 时 Windows 窗体 GUI 挂起

标签 c# .net winforms user-interface

我的项目是一个三层架构项目,与后端的 WCF 服务对话。当后端能够从服务获取数据时,它会使用发布-订阅通知业务层,而业务层又会通知 GUI 层。

我使用 Visual Studios 设计器将 OpenFileDialog 添加到我的 UI 设计中。按钮事件处理程序调用 ShowDialog 消息。但是,一旦我单击该按钮,整个 UI 就会挂起。

在谷歌上搜索了一下,我发现使用委托(delegate)是处理此类任务的首选方式。但是,无论有没有委托(delegate),问题仍然存在。

目前我的代码是这样的:

private void bOpen_Click(object sender, EventArgs e)
{
    Func<Image> del = delegate
    {
        OpenFileDialog d = new OpenFileDialog();
        if (d.ShowDialog() == DialogResult.OK)
        {
            return Image.FromFile(d.FileName);
        }

        return null;
    };

    Invoke(del);
}

我来自 Java 世界,所以我不太熟悉 C# UI 编程的复杂性。

我在这里遗漏了什么吗?

最佳答案

openFileDialog1->ShowHelp = true;

我把这一行放在我的代码中,然后问题就解决了。

关于c# - 调用 OpenFileDialog.ShowDialog() 时 Windows 窗体 GUI 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6718148/

相关文章:

c# - 地址类型的生效日期和到期日期

c# - TPL 数据流消费者一次处理多个项目

.net - log4net 没有登录到数据库

c# - 强制下载文件,默认不在浏览器上打开它

c# - 为什么 Mono 运行简单方法的速度较慢,而 RyuJIT 运行速度明显更快?

c# - ASP.NET DropDownList 错误 -- SelectedItem/Value 从不更新

c# - 动态添加复选框到 Windows 窗体只显示一个复选框

c# - 更改 ComboBox 项的格式

c# - 使用多线程进行慢速 Ms 互操作

c# - 命名空间 'OracleClient' 中不存在类型或命名空间名称 'System.Data'