Два вида поведения при запуске приложения - PullRequest
0 голосов
/ 12 марта 2012

У меня есть приложение, для которого я хочу иметь два различных типа поведения при запуске.
Например: если пользователь запускает приложение с рабочего стола или из ярлыков приложений, приложение должно запуститься и запросить ввод.

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

Как можно добиться такого поведения? Возможно, я думал о двух разных перегрузках конструктора, которые будут делать разные вещи в случаях буксировки. Однако как выбрать, какой конструктор следует запускать в нужное время (запуск приложения запуска / запуск приложения рабочего стола)?
Как это можно сделать в WPF?

Ответы [ 2 ]

5 голосов
/ 12 марта 2012

Рассматривали ли вы использование параметров запуска.Когда вы запускаете его автоматически, вы можете ввести аргумент

"MyApplication.exe -autostart"

При установке ярлыков приложение может запускаться без аргументов

"MyApplication.exe"

В вашем приложении "Main" метод используйте предложение if и реагируйте соответственно.Для этого проверьте аргумент "string [] args" из метода main

static void Main (string [] args)

0 голосов
/ 12 марта 2012

Я делал это раньше с разными классами, потому что поведение сильно различалось в зависимости от конфигурации, и я хотел полностью изолировать случаи друг от друга.

После анализа аргументов командной строки вы можете создать экземпляр класса и вызвать метод с помощью:

string customerClassName = string.Format("DataProcessor.{0}Processor", ConfigurationManager.AppSettings.Get("Customer"));
Type customerClass = Assembly.GetExecutingAssembly().GetType(customerClassName);
ConstructorInfo ctor = customerClass.GetConstructor(System.Type.EmptyTypes);
Logger.Log("Instantiating class " + customerClassName);
object instance = ctor.Invoke(null);
customerClass.GetMethod("Run").Invoke(instance, new object[] { args });

В GetConstructor () вы можете указать различные перегрузки конструктора, в моем случае конструктор без параметров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...