我无法找到其他人遇到同样的问题,所以希望有人可能有一些想法或者能够指出我另一个答案.
通过按下窗体上的按钮运行功能时,另一个按钮应该可见.但是,按钮永远不会显示,即使它是函数中的第一件事.该函数中的所有其他代码都可以正常工作.
这是代码:
private void trackbar_Change(object sender, EventArgs e)
{
button.Visible = true;
progressbar.Visible = true;
...
progressbar.Visible = false;
button.Visible = false;
}
Run Code Online (Sandbox Code Playgroud)
进度条显示并正常工作,函数中的所有其他代码也可以正常工作,但按钮永远不会显示.
如果我button.Visible = false;从函数的末尾删除,则按钮显示,但仅在所有其他代码执行之后.像这样:
private void trackbar_Change(object sender, EventArgs e)
{
button.Visible = true;
progressbar.Visible = true;
...
progressbar.Visible = false;
//button.Visible = false;
}
Run Code Online (Sandbox Code Playgroud)
注释掉该行会导致按钮显示.现在如果我在按钮行后面添加一个消息框,那么它也可以工作.
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;
}
Run Code Online (Sandbox Code Playgroud)
按钮行后添加消息框导致按钮在正确的时间显示.
有没有人有任何想法为什么这个按钮的行为方式?
听起来像GUI线程很忙.尝试通过调用Application.DoEvents()来强制屏幕更新,例如:
button.Visible = true;
progressbar.Visible = true;
Application.DoEvents();
Run Code Online (Sandbox Code Playgroud)
DoEvents() 将强制处理消息队列中的所有消息.
一个更好的解决方案将是移动主UI线程的长时间运行的线程.使用BackgroundWorker完成任务.
它将使整个表单更具响应性.例如,您将能够与表单进行交互,并且它不会变为"白色".实现BackgroundWorker很简单,对于主UI线程上的长时间运行进程是必须的,
| 归档时间: |
|
| 查看次数: |
43963 次 |
| 最近记录: |