gpt4 book ai didi

c# - 从另一个对话框调用时 OpenFileDialog 卡住

转载 作者:行者123 更新时间:2023-12-02 08:48:58 26 4
gpt4 key购买 nike

我有表格:Splashscreen , Search ,和NewEntry

Program.cs开始Splashscreen它检查一些参数并在成功后(检查用户名、权限等)打开 Search形式。从那里我可以调用 NewEntry表格。

所以自从 SplashscreenMain() 调用的主要形式函数,一旦关闭,应用程序就会关闭(这是预期的行为)。
所以我所做的是从内部Splashscreen我启动Search形成一个对话框并隐藏 Splashscreen ,所以它等待 Search关闭。一旦关闭,我也关闭Splashscreen这一切在当时看来都是有道理的。来自Search我打开NewEntry表单(通过单击按钮)也作为对话框(我不希望用户来回单击并创建多个 NewEntry 窗口)。

今天我必须添加一个允许用户选择文件的功能。作为一个显而易见的选择,我使用了 OpenFileDialog 。但当我调用 .ShowDialog()方法,整个应用程序就卡住了。

我已阅读 Windows Forms GUI hangs when calling OpenFileDialog.ShowDialog()OpenFileDialog.ShowDialog() freezing application c#以及这里和其他网站上的一堆其他帖子,当我几乎失去希望时,我遇到了这个 http://wishmesh.com/2011/06/call-to-openfiledialog-or-savefiledialog-hangs-or-freezes/
我确实有[STAThread]我的 Main() 上设置的属性功能

一个特别值得关注的点是:对于 OpenFileDialog,必须显式设置 ShowHelp 属性。
还有...它们不必设置为 true,只需初始化为 true 或 false。

所以当我设置ShowHelp时至true ,出现对话框(带有无用的“帮助”按钮)。

进一步的研究表明,当我执行 (new OpenFileDialog()).ShowDialog();Program.cs内或 Splashscreen 内,效果很好;但是,当从对话框调用时,会出现挂起(没有 ShowHelp )。此外,MessageBoxDialog 中显示得很好...

那么有没有办法让这个工作成功呢?或者我应该以不同的方式管理我的窗口?
例如,有 Search作为主启动窗口,然后在窗口显示之前,调用 Splashscreen作为一个对话框,如果失败,只需关闭主窗口?但是,我该如何处理 NewEntry能够显示OpenFileDialogFolderBrowserDialog

谢谢。

最佳答案

我最关心的部分是当你说你有 SplashScreen 等待搜索关闭时。如果你正在这样做

if (search.ShowDialog() == DialogResult.OK)
{
Show();
}

那么您已经卡住了 SplashScreen 的 UI 线程。由于它是主要形式,因此事情不太可能按预期进行。我建议将代码更改为此。

Hide(); // Hides SplashScreen
Search search = new Search();
search.ParentForm = this;
search.Show(); // Show Search without freezing SplashScreen thread

ParentForm 是我添加到搜索中的公共(public)变量。这应该是私有(private)的,并且应该通过 getter/setter 进行访问,但这会使代码示例简短。

public partial class Search: Form
{
public SplashScreen ParentForm;
...
}

接下来,您需要添加一个处理程序来处理搜索表单的关闭。这将显示启动画面。

private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
ParentForm.Show();
}

进行这些更改后,OpenFileDialog 显示工作正常。

关于c# - 从另一个对话框调用时 OpenFileDialog 卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21338914/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com