2010-08-01 38 views
2

那么
这是一个非常简单的问题,搜索tearms并不是那么好。找出如果在WPF或控制台模式下运行(c#)

如果我当前正在作为控制台应用程序运行而不是WPF窗口应用程序,如何检入某个库?

感谢您的任何提示,

克里斯

+4

如果你问这个问题,你正在做的事情错误的是,即使我们不认为在技术上可以同时拥有控制台和WPF UI的应用程序,如果从WinForms应用程序调用您的lib,该怎么办?或从在IIS下运行的ASP.NET应用程序?或者将在未来版本的.net中引入的一些全新的应用程序? – Nir 2010-08-01 14:30:43

+1

就我而言,我有一个能够创建PDF文件或显示预览的报告引擎。 (当从控制台应用程序调用引擎时,允许预览相关部分的代码被忽略/忽略,允许它执行得更快/不会崩溃,试图为不支持它的应用程序执行wpf相关内容。) – Wonderbird 2013-12-19 02:06:11

回答

2

您可以检查当前线程是否是通过检查Dispatcher.Current一个WPF UI线程。

0

ILDASM将如下在清单中的条目:

.subsystem 0x0003  // WINDOWS_CUI 

.subsystem 0x0002  // WINDOWS_GUI 

基础上,subsystemtype你能告诉我们,如果它的GUI或者CUI。

这些信息也可以从下面的命令:

dumpbin ConsoleApplication1.exe /headers 

从资料库中查询条目组装,并得到其完整路径(Assembly.GetEntryAssembly()基本代码),然后就可以发出任何的这些命令来了解子系统。

2

还有更多,如果你的库方法是从工作线程调用的呢?你没有告诉你为什么需要知道,阻止了一个好的答案。一种方法是,使用你的库的应用程序永远不会有任何问题知道它的控制台或WPF。公开一个属性以允许它告诉你。另一个是使用事件,所以应用程序可以简单地实现它喜欢的事件处理程序。依赖注入是另一个。

2

您可以检查如果执行的语句与下面的语句一个WPF主机上运行:

if (System.Windows.Application.Current != null) 
{ 
//statements for WPF mode 
} 
else 
{ 
//statements for non WPF mode... 
} 

为此,你必须引用PresentationFramework.dll

相关问题