对于控制台应用程序,当我执行window.Show()时,我的WPF窗口挂起。但是在App.xaml(Window Application)中运行时,没关系。
我使用AggregateCatalog来初始化我的对象,而不是使用下面的代码。
var application = new System.Windows.Application();
application.Run(new MyWindow());
对于AggregateCatalog:
private static AggregateCatalog catalog;
private static CompositionContainer container;
private static IEnumerable<IModuleController> moduleControllers;
private static void RunApplication()
{
catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(typeof(ViewModel).Assembly));
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly()));
container = new CompositionContainer(catalog, CompositionOptions.DisableSilentRejection);
CompositionBatch batch = new CompositionBatch();
batch.AddExportedValue(container);
container.Compose(batch);
moduleControllers = container.GetExportedValues<IModuleController>();
foreach (IModuleController moduleController in moduleControllers) { moduleController.Initialize(); }
foreach (IModuleController moduleController in moduleControllers) { moduleController.Run(); }
}
如果我使用相同的RunApplication()在控制台应用程序中运行它,是否有限制?
答案 0 :(得分:0)
使用控制台应用程序显示Windows窗体通常不是一个好主意。堆栈溢出有一个很好的问题,它给出了确切的区别 控制台和Windows应用程序之间以及可能遇到的问题 Difference between Windows and Console application
您可以通过在单独的线程中运行它来运行WPF应用程序,但它可能仍然以一种奇怪的方式运行,并且您作为程序员必须解决问题而不是VS为您执行此操作时创建一个适合目的的项目模板。 看看这个评论,了解我的意思: https://stackoverflow.com/a/574934/2794980