Me he encontrado con un problema con una implementación de wpf splash-screen personalizada. El problema es que una vez que finaliza la carga y se muestra la ventana principal, a veces no se lleva al frente, es decir, falla la llamada Activate(). Sucede tal vez 1/10 veces. La aplicación se ejecuta en Windows7/64.Llevar la ventana principal al frente después de que la pantalla secundaria se apague
Aquí es el implmentation (fuente completo sample)
public partial class App : Application
{
private Splash _splash;
private SplashVM _viewModel;
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
// starts splash in separate GUI thread
StartSplash();
// continues on loading main application in main gui thread
LoadMainAppFakeSteps(1000, 3);
// tells splash screen to start shutting down
Stop();
// Creates mainwindow for application
// The problem is that the mainwindow sometimes fails to activate,
// even when user has not touched mouse or keyboard (i.e has not given any other programs or components focus)
MainWindow = new Shell();
MainWindow.Show();
MainWindow.Activate();
}
private void StartSplash()
{
_viewModel = new SplashVM();
var thread = new Thread(SplashThread);
thread.SetApartmentState(ApartmentState.STA);
thread.IsBackground = true;
thread.Start(_viewModel);
}
private void SplashThread(object vm)
{
_splash = new Splash();
_splash.DataContext = vm;
_splash.Show();
System.Windows.Threading.Dispatcher.Run();
_splash = null;
_viewModel = null;
}
private void LoadMainAppFakeSteps(int stepDelayMs, int numSteps)
{
for (int i = 1; i <= numSteps; i++)
{
_viewModel.Text = i.ToString();
Thread.Sleep(stepDelayMs);
}
}
private void Stop()
{
if (_splash == null) throw new InvalidOperationException("Not showing splash screen");
_splash.Dispatcher.BeginInvokeShutdown(DispatcherPriority.Normal);
}
}
He intentado esto:
MainWindow = new Shell();
MainWindow.Topmost = true;
MainWindow.Show();
MainWindow.Activate();
MainWindow.Topmost = false;
y parece que funciona, gracias a todas sus sugerencias
Lo intenté 30 veces con Windows XP y nunca me di cuenta del problema. ¿En qué SO tienes este problema? –
No puedo reproducir el problema también. Estoy usando Windows 7. –
@Meleak Win7/64 – hkon