gpt4 book ai didi

c# - 在 DialogForm 上显示 MessageBox 导致奇怪的 UI 故障

转载 作者:太空宇宙 更新时间:2023-11-03 16:06:05 25 4
gpt4 key购买 nike

我的表单上有一个按钮,单击它时它会执行以下操作:

private void btnCheckSVN_Click(object sender, EventArgs e)
{
wait = new DevExpress.Utils.WaitDialogForm("Fetching File SVN Status",
"Please Wait");
wait.AutoSize = true;
wait.Visible = false;
bgwSVN.RunWorkerAsync();
wait.ShowDialog();
}
private void bgwSVN_DoWork(object sender, DoWorkEventArgs e)
{
e.Result = svn.SvnStatusEventArgsToDataTable(svn.CheckSVN(_localPath));
}

private void bgwSVn_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
DataTable dt = (DataTable)e.Result;
dt.DefaultView.Sort = "File ASC";
gdcSVN.DataSource = dt;
gdcSVNDefaultView.BestFitColumns();
xtcTabs.SelectedTabPageIndex = 1;
lblTotalFileCount.Text = dt.Rows.Count.ToString();
if (dt.Rows.Count == 0)
XtraMessageBox.Show("No files found.",
"Error",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
wait.Close();
}

按照这个操作顺序,您(显然)仍然可以看到 MessageBox 后面的等待对话框,在我看来它看起来真的很草率。

如果我切换 IF 语句和 Close() 调用,我的 WaitDialogForm 会因为找不到更好的术语而半消失。有一个带有红色框的空矩形和一个巨大的 X 穿过它,然后是 MessageBox 在它上面作为它自己的形式。

这是我第一次弄乱任何类型的多线程或使用 BackgroundWorker 对象,所以我确定我只是错过了一些非常愚蠢的东西,但我不知道是什么?

我尝试从此事件中完全删除 MessageBox,而是这样做:

 wait.Close();
lblTotalFileCount.Text = dt.Rows.Count.ToString();

然后处理标签的 TextChanged 事件并检查它是否应该显示 MessageBox 然后......但我仍然得到与红色框相同的结果。

编辑;另外,我注意到一件奇怪的事情。在表单加载时,lblTotalFileCount 被设置为 0。当此方法运行并说它找到 0 个文件时,它会将 lblTotalFileCount.Text 重新设置为零...哪个没有触发 TextChanged 事件?我知道它被设置为与现在相同的东西,但它仍然在技术上发生了变化。我是否遗漏了什么,或者事件是否实际检查了该条件并在这种情况下“跳过”它?我不得不将标签设置为一个空字符串...但是假设他们运行应用程序,它被设置为 0,提醒他们,他们进行了一些更改,再次运行它...仍然是 0,它不会提醒他们。

编辑2;我想也许如果我尝试在标签的 TextChanged 事件中调用 wait.Close(),正如我第一次编辑中提到的那样, MessageBox 出现之前,也许它会起作用?没有。同样的问题。然后,如果我第二次单击该按钮,表单会因为等待已被处理而崩溃?这是一个表单级属性,为什么会被处置?

编辑3;好吧,如果我在 TextChanged 事件中调用 wait.Dispose,我会得到所需的行为。除了它最小化主应用程序并只向我显示 MessageBox 除非它后面没有任何内容。一个...的儿子

最佳答案

对 Windows 窗体控件进行线程安全调用。要从另一个线程修改 winform 或控件(BackgroundWorker 这样做),您应该从主线程进行此调用。在这个问题中你有答案:How to update the GUI from another thread in C#?

关于c# - 在 DialogForm 上显示 MessageBox 导致奇怪的 UI 故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19325148/

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