为什么主要形式消失了?

时间:2013-05-27 16:19:36

标签: c# .net winforms

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

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

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

当任务完成时

progressBar.Close();

但有时确切地说,显示进度条的表单会被关闭,主表单会转到后台。更确切地说,我需要做些什么来重现这个问题:

  • 启动我的申请
  • 点击另一个窗口(另一个应用程序,让我们说Excel)将它带到前面
  • 点击我的申请窗口(将其带到前面)
  • 运行任务

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

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

2 个答案:

答案 0 :(得分:1)

的MainForm

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

进度

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

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

答案 1 :(得分:0)

如果我理解正确,当您关闭显示进度条的Form时,主Form会转到后台?

如果是这样,您可能需要在显示进度条表单后将焦点返回到主窗体,因为它会占用焦点。

这是一个堆栈溢出问题,讨论了表单焦点:

Form lost focus - Basic Question