1

在表单上,​​通过单击按钮启动长时间运行的任务。该任务在一个单独的工作线程上运行,我在任务运行时显示另一个带有进度条的表单。

当任务完成或以其他方式取消时,显示进度条的表单将关闭。虚拟代码可能如下所示:

task.DoWorkAsync();
progressBar.Show(parent);

当任务完成时

progressBar.Close();

但有时恰好在显示进度条的表单关闭的那一刻,主表单进入后台。更准确地说,我必须做些什么来重现这个问题:

  • 开始我的申请
  • 单击另一个窗口(另一个应用程序的,比如 Excel)将其置于最前面
  • 单击我的应用程序窗口(将其置于前面)
  • 运行任务

现在进度条关闭后,我的应用程序窗口消失在我之前带到前面的另一个窗口(这里是 Excel)后面。

当然,我上面描述的只是我的应用程序的粗略概述。但是我需要找出为什么我的表单在进度条关闭时消失在表单后面。

4

2 回答 2

1

主窗体

ProgressBar progress = new ProgressBar(this);
progress.Show();
this.Hide();

进度条

parent.Show();
progress.Hide();

或者,您可以使用ShowDialog(),这将使主窗体保持打开状态,但在进度条窗体关闭之前无法访问。

于 2013-05-27T16:46:40.437 回答
0

如果我理解正确,当您关闭Form显示进度条时,主要Form进入后台?

如果是这样,您可能需要在显示进度条表单后将焦点返回到主表单,因为它偷走了焦点。

这是一个关于表单焦点的堆栈溢出问题:

表格失去焦点 - 基本问题

于 2013-05-27T16:46:51.750 回答