我必须在一个没有深思熟虑的应用程序上显示一个窗口。来自每个窗口的调用都来自同一个线程,没有后台工作者。该应用程序相当yuge,所以我不能只是实现BW模式。问题是,其中一些操作需要一段时间(大约5-10秒),整个应用程序在等待时会变为无响应。
我的想法是在后台线程上实现某种看门狗,只要我设置一个标志(App.Loading)就会弹出一个窗口,以便让用户知道某些事情正在发生。
为了做到这一点,我把它放在主菜单中
public Menu()
{
ShowInTaskbar = true;
InitializeComponent();
Debug.Ventana = "Menu";
App.Menu = this;
Loading = new Thread(new ThreadStart(CheckLoading));
Loading.SetApartmentState(ApartmentState.STA);
Loading.Start();
}
private void CheckLoading()
{
Loading load = new Andrei.Loading("Cargando datos")
{
ShowInTaskbar = false,
Topmost = true
};
while(true)
{
if (App.Loading && !load.IsVisible)
load.Show();
if (!App.Loading && load.IsVisible)
load.Hide();
}
}
问题是,有时窗口没有出现,当它出现时,动画不起作用(这是一个带有字符串和不确定进度条的小窗口),这必须是因为主线程被冻结了一会儿(真实)。我已经尝试将循环放在另一个线程中,但我无法从另一个线程访问该窗口来隐藏和显示它。我已经尝试在窗口上放置一个BW来检查进度,但当然,在完成第一个循环之后,它不再寻找标志了。
除了完全重新设计应用程序以将BW用于任何和所有时间进程之外的任何其他建议吗?