【发布时间】:2010-02-10 00:01:44
【问题描述】:
我的应用程序中有一些很长的进程,所以我创建了一个 WAIT PLEASE 表单并像这样调用另一个线程:
public void ShowWait()
{
continueWait = true;
ThreadPool.QueueUserWorkItem((x) =>
{
using (frmWait espera = new frmWait())
{
espera.ShowInTaskbar = false;
espera.Show();
while (continueWait)
Application.DoEvents();
espera.Close();
}
});
}
并关闭我使用的表单:
public void HideWait()
{
continueWait = false;
}
它工作正常,但我有一个问题,当显示等待表单时,主表单失去焦点,同时运行的任何其他应用程序(Excel、Word 等)进入顶部,我的应用程序运行到所有应用程序的后面。我尝试使用 Activate() 和 Focus(),但只有任务栏上的框架激活,但应用程序仍位于所有应用程序的背面。
对此有什么启示吗?
提前致谢
【问题讨论】:
-
我强烈建议您使用在
HideWait方法中发出信号的等待句柄(例如ManualResetEvent)替换您的 while 循环。这样您就不会使用任何不必要的 CPU 资源。 -
当我使用手动或自动重置事件时,应用程序挂起,等待表单不显示等待动画,整个应用程序都在等待信号。
-
这里已经解决了好几次这个问题了...看看:1.stackoverflow.com/questions/2183520/… 2.stackoverflow.com/questions/2152445/…
标签: c# winforms multithreading