2010-08-01 6 views
2

Ну
Это действительно простой вопрос, поисковые слезы просто не так уж велики.Узнайте, работает ли в WPF или режиме консоли (C#)

Как проверить в какой-либо библиотеке, если в настоящее время я запускаю консольное приложение, а также приложение окна WPF?

Спасибо за любые советы,

Chris

+4

Если вы задаете этот вопрос, вы делаете что-то неправильно, даже если мы не считаем, что технически возможно иметь приложение с консолью и интерфейсом WPF, что делать, если ваша библиотека вызывается из приложения WinForms? или из приложения ASP.NET, работающего под IIS? или какой-то совершенно новый вид приложения, который будет представлен в будущей версии .net? – Nir

+1

В моем случае у меня есть механизм отчетности, способный создавать PDF-файл или показывать предварительный просмотр. (Предоставление части кода для предварительного просмотра, которое должно быть пропущено/проигнорировано при вызове движка из консольного приложения, позволяет ему выполнять более быстрый/не сбой, пытаясь сделать связанный с wpf материал для приложения, которое его не поддерживает). – Wonderbird

ответ

2

Вы можете проверить, является ли текущий поток поток WPF UI, проверяя Dispatcher.Current.

0

ILDASM будет иметь запись в манифест следующим образом:

.subsystem 0x0003  // WINDOWS_CUI 

.subsystem 0x0002  // WINDOWS_GUI 

на основе subsystemtype вы можете сказать, если его GUI или НПИ.

Эта информация также доступна из следующей команды:

dumpbin ConsoleApplication1.exe /headers 

Из читательского запроса для сборки ввода и получить полный путь (. Assembly.GetEntryAssembly() CodeBase), а затем вы можете оформить любой из них команду знать подсистему.

2

Есть еще, что, если ваш библиотечный метод вызывается из рабочего потока? Вы не сказали, почему вам нужно знать, не давая хорошего ответа. Один из подходов заключается в том, что приложение, использующее вашу библиотеку, никогда не знает проблем с его консолью или WPF. Выделите свойство, чтобы он мог вам рассказать. В другом случае используются события, поэтому приложение может просто реализовать обработчик событий по своему вкусу. Инъекция зависимостей - другая.

2

Вы можете проверить, если выполняются операторы работают в хосте WPF со следующим утверждением:

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

Для этого вы должны ссылаться на PresentationFramework.dll

Смежные вопросы