那么
这是一个非常简单的问题,搜索tearms并不是那么好。找出如果在WPF或控制台模式下运行(c#)
如果我当前正在作为控制台应用程序运行而不是WPF窗口应用程序,如何检入某个库?
感谢您的任何提示,
克里斯
那么
这是一个非常简单的问题,搜索tearms并不是那么好。找出如果在WPF或控制台模式下运行(c#)
如果我当前正在作为控制台应用程序运行而不是WPF窗口应用程序,如何检入某个库?
感谢您的任何提示,
克里斯
您可以检查当前线程是否是通过检查Dispatcher.Current
一个WPF UI线程。
ILDASM将如下在清单中的条目:
.subsystem 0x0003 // WINDOWS_CUI
.subsystem 0x0002 // WINDOWS_GUI
基础上,subsystemtype你能告诉我们,如果它的GUI或者CUI。
这些信息也可以从下面的命令:
dumpbin ConsoleApplication1.exe /headers
从资料库中查询条目组装,并得到其完整路径(Assembly.GetEntryAssembly()基本代码),然后就可以发出任何的这些命令来了解子系统。
还有更多,如果你的库方法是从工作线程调用的呢?你没有告诉你为什么需要知道,阻止了一个好的答案。一种方法是,使用你的库的应用程序永远不会有任何问题知道它的控制台或WPF。公开一个属性以允许它告诉你。另一个是使用事件,所以应用程序可以简单地实现它喜欢的事件处理程序。依赖注入是另一个。
您可以检查如果执行的语句与下面的语句一个WPF主机上运行:
if (System.Windows.Application.Current != null)
{
//statements for WPF mode
}
else
{
//statements for non WPF mode...
}
为此,你必须引用PresentationFramework.dll
如果你问这个问题,你正在做的事情错误的是,即使我们不认为在技术上可以同时拥有控制台和WPF UI的应用程序,如果从WinForms应用程序调用您的lib,该怎么办?或从在IIS下运行的ASP.NET应用程序?或者将在未来版本的.net中引入的一些全新的应用程序? – Nir 2010-08-01 14:30:43
就我而言,我有一个能够创建PDF文件或显示预览的报告引擎。 (当从控制台应用程序调用引擎时,允许预览相关部分的代码被忽略/忽略,允许它执行得更快/不会崩溃,试图为不支持它的应用程序执行wpf相关内容。) – Wonderbird 2013-12-19 02:06:11