gpt4 book ai didi

.net - Windows 窗体 : A modal form that gets opened/closed by the application rather than the user?

转载 作者:行者123 更新时间:2023-12-03 13:18:12 29 4
gpt4 key购买 nike

我有一个我认为结构良好的 .NET 3.5 表单应用程序(单元测试、依赖注入(inject)、SoC,表单只是中继输入和显示输出,不做任何逻辑,yadda yadda)我只是想念winforms关于如何让这个位工作的知识。

当与数据库的连接丢失时 - 经常发生 - 我正在检测并处理它,并希望弹出一个模式表单,阻止应用程序的使用,直到重新建立连接。我不是 100% 确定如何做到这一点,因为我不是在等待用户输入,而是使用计时器轮询数据库。

我的尝试是设计一个带有标签的表单并这样做:

partial class MySustainedDialog : Form {
public MySustainedDialog(string msg) {
InitializeComponent();
lbMessage.Text = msg;
}
public new void Show() {
base.ShowDialog();
}

public new void Hide() {
this.Close();
}

}

public class MyNoConnectionDialog : INoConnectionDialog {
private FakeSustainedDialog _dialog;
public void Show() {
var w = new BackgroundWorker();
w.DoWork += delegate {
_dialog = new MySustainedDialog("Connection Lost");
_dialog.Show();
};
w.RunWorkerAsync();
}

public void Hide() {
_dialog.Close();
}
}

这不起作用,因为 _dialog.Close() 是一个跨线程调用。我已经能够找到有关如何在 Windows 窗体中解决此问题的信息,但在需要创建窗体本身的这种情况下却找不到。

有人可以给我一些建议如何实现我想要做的事情吗?

编辑:请注意,我只是因为缺乏其他想法而尝试了后台工作人员,因为我对 UI 线程的工作原理并不十分熟悉,所以我完全愿意接受建议。我还应该注意,我不想关闭他们目前正在处理的表单,我只是希望它出现在它上面。就像一个确定/取消对话框,但我可以通过编程方式打开和关闭(我需要控制它的外观)

最佳答案

我不确定您的整体方法的正确性,但要具体回答您的问题,请尝试将 MySustainedDialog Hide() 函数更改为如下:

    public new void Hide()
{
if (this.InvokeRequired)
{
this.BeginInvoke((MethodInvoker)delegate { this.Hide(); });
return;
}

this.Close();
}

关于.net - Windows 窗体 : A modal form that gets opened/closed by the application rather than the user?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/158122/

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