sólo para ofrecer una solución alternativa. Es posible mantener una aplicación ejecutándose sin ventanas abiertas. Para mí esto se siente menos 'hackish'. :) http://msdn.microsoft.com/en-us/library/system.windows.application.shutdownmode.aspx
public class AppCode : Application
{
// Entry point method
[STAThread]
public static void Main()
{
AppCode app = new AppCode();
app.ShutdownMode = ShutdownMode.OnExplicitShutdown;
app.Run();
...
app.Shutdown();
}
}
EDIT: Muy bien, este tiene un poco engorroso. Application.Run bloqueará, por lo que debe ejecutarse en su propio hilo. Cuando se ejecuta en su propio hilo, cualquier interacción entre el hilo principal y el hilo de la interfaz de usuario se debe hacer mejor con Application.Current.Dispatcher.Invoke. Aquí hay un código de trabajo, que supone que tiene una clase que hereda de la aplicación. Estoy usando una App.xaml/App.xaml.cs modificada que una plantilla de proyecto de WPF crea para usted, para obtener un buen manejo de ResourceDictionaries de forma gratuita.
public class Program
{
// Entry point method
[STAThread]
public static void Main()
{
var thread = new System.Threading.Thread(CreateApp);
thread.SetApartmentState(System.Threading.ApartmentState.STA);
thread.Start();
// This is kinda shoddy, but the thread needs some time
// before we can invoke anything on the dispatcher
System.Threading.Thread.Sleep(100);
// In order to get input from the user, display a
// dialog and return the result on the dispatcher
var result = (int)Application.Current.Dispatcher.Invoke(new Func<int>(() =>
{
var win = new MainWindow();
win.ShowDialog();
return 10;
}), null);
// Show something to the user without waiting for a result
Application.Current.Dispatcher.Invoke(new Action(() =>
{
var win = new MainWindow();
win.ShowDialog();
}), null);
System.Console.WriteLine("result" + result);
System.Console.ReadLine();
// This doesn't really seem necessary
Application.Current.Dispatcher.InvokeShutdown();
}
private static void CreateApp()
{
App app = new App();
app.ShutdownMode = ShutdownMode.OnExplicitShutdown;
app.Run();
}
}
Si no 'Ejecuta()' una aplicación, no tiene una 'Aplicación'. ¿Qué estás haciendo? – SLaks
Aaah, las alegrías de usar controles WPF fuera de una aplicación WPF. – Will
Estoy tratando de mostrar las ventanas de WPF desde una aplicación de consola multiproceso. Los casos de la misma ventana que se muestran varias veces pueden ocurrir y ocurrirán también, ¡así que la situación no es demasiado fácil! :/ – em70