gpt4 book ai didi

c# - Button.Visible = true;在功能中激活时无法将按钮设置为可见

转载 作者:行者123 更新时间:2023-11-30 13:49:29 25 4
gpt4 key购买 nike

我没能找到其他人遇到同样的问题,所以希望有人可能有一些想法或者能够指出我另一个答案。

当通过按下窗体上的按钮运行函数时,另一个按钮应该会变为可见。然而,按钮永远不会出现,即使它是函数中的第一件事。该函数中的所有其他代码都可以完美运行。

代码如下:

private void trackbar_Change(object sender, EventArgs e)
{
button.Visible = true;
progressbar.Visible = true;

...

progressbar.Visible = false;
button.Visible = false;
}

进度条出现并工作正常,函数中的所有其他代码也工作正常,但按钮根本不显示。

如果我从函数末尾删除 button.Visible = false;,那么按钮确实会显示,但只有在所有其他代码都已执行后才会显示。像这样:

private void trackbar_Change(object sender, EventArgs e)
{
button.Visible = true;
progressbar.Visible = true;

...

progressbar.Visible = false;
//button.Visible = false;
}

注释掉该行会导致按钮出现。现在,如果我在按钮行之后添加一个消息框,那么它也可以工作。

private void trackbar_Change(object sender, EventArgs e)
{
button.Visible = true;
MessageBox.Show("Button should be visible now");
progressbar.Visible = true;

...

progressbar.Visible = false;
button.Visible = false;
}

在按钮行之后添加消息框使按钮在正确的时间出现。

有人知道为什么这个按钮会这样吗?

最佳答案

听起来 GUI 线程很忙。尝试通过调用 Application.DoEvents() 强制屏幕更新,例如:

button.Visible = true;
progressbar.Visible = true;
Application.DoEvents();

DoEvents() 将强制处理消息队列中的所有消息。

更好的解决方案 是移动主 UI 线程的长期运行线程。使用BackgroundWorker为了任务。

这将使表单整体上更具响应性。例如,您将能够与表单进行交互并且它不会变成“白色”。实现 BackgroundWorker 很简单,对于在主 UI 线程上长时间运行的进程来说是必须的,

关于c# - Button.Visible = true;在功能中激活时无法将按钮设置为可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9441084/

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