Чтение онлайн

на главную

Жанры

Язык программирования C#9 и платформа .NET5
Шрифт:

Разгадывание загадки Main

Теперь, когда известно, как работает процесс

msbuild.exe
, откройте файл
Арр.g.cs
. В нем обнаружится автоматически сгенерированный метод
Main
, который инициализирует и запускает ваш объект приложения:

public static void Main {

WpfTesterApp.App app = new WpfTesterApp.App;

app.InitializeComponent;

app.Run;

}

Метод

InitializeComponent
конфигурирует свойства приложения, включая
StartupUri
и обработчики событий
Startup
и
Exit
:

public void InitializeComponent {

#line 5 "..\..\App.xaml"

this.Startup += new System.Windows.StartupEventHandler(this.App_OnStartup);

#line default

#line hidden

#line 5 "..\..\App.xaml"

this.Exit += new System.Windows.ExitEventHandler(this.App_OnExit);

#line default

#line hidden

#line 5 "..\..\App.xaml"

this.StartupUri =

new System.Uri("MainWindow.xaml", System.UriKind.Relative);

#line default

#line hidden

}

Взаимодействие с данными уровня приложения

Вспомните, что в классе

Application
имеется свойство по имени
Properties
, которое позволяет определить коллекцию пар "имя/значение" посредством индексатора типа. Поскольку этот индексатор предназначен для оперирования на типе
System.Object
, в коллекцию можно сохранять элементы любого вида (в том числе экземпляры специальных классов) с целью последующего извлечения по дружественному имени. С использованием такого подхода легко разделять данные между всеми окнами в приложении WPF.

В целях иллюстрации вы обновите текущий обработчик события

Startup
, чтобы он проверял входящие аргументы командной строки на присутствие значения
/GODMODE
(распространенный мошеннический код во многих играх). Если оно найдено, тогда значение
bool
по имени
GodMode
внутри коллекции свойств устанавливается в
true
(в противном случае оно устанавливается в
false
).

Звучит достаточно просто, но как передать обработчику события

Startup
входные аргументы командной строки (обычно получаемые методом
Main
)? Один из подходов предусматривает вызов статического метода
Environment.GetCommandLineArgs
. Однако те же самые аргументы автоматически добавляются во входной параметр
StartupEventArgs
и доступны через свойство
Args
. Ниже приведена первая модификация текущей кодовой базы:

private void App_OnStartup(object sender, StartupEventArgs e)

{

Application.Current.Properties["GodMode"] = false;

//
Проверить входные аргументы командной строки

// на предмет наличия флага /GODMODE.

foreach (string arg in e.Args)

{

if (arg.Equals("/godmode",StringComparison.OrdinalIgnoreCase))

{

Application.Current.Properties["GodMode"] = true;

break;

}

}

}

Данные уровня приложения доступны из любого места внутри приложения WPF. Для обращения к ним потребуется лишь получить точку доступа к глобальному объекту приложения (через

Application.Current
) и просмотреть коллекцию. Например, обработчик события
Click
для кнопки можно было бы изменить следующим образом:

private void Button_Click(object sender, RoutedEventArgs e)

{

// Указал ли пользователь /godmode?

if ((bool)Application.Current.Properties["GodMode"])

{

MessageBox.Show("Cheater!"); // Мошенник!

}

}

Если теперь ввести аргумент командной строки

/godmode
на вкладке Debug (Отладка) в окне свойств проекта и запустить программу, то отобразится окно сообщения и программа завершится. Можно также запустить программу из командной строки с помощью показанной ниже команды (предварительно открыв окно командной строки и перейдя в каталог
bin/debug
):

WpfAppAllCode.exe /godmode

Отобразится окно сообщения и программа завершится.

На заметку! Вспомните, что аргументы командной строки можно указывать внутри Visual Studio. Нужно просто дважды щелкнуть на значке Properties (Свойства) в окне Solution Explorer, в открывшемся диалоговом окне перейти на вкладку Debug (Отладка) и ввести

/godmode
в поле Command line arguments (Аргументы командной строки).

Обработка закрытия объекта Window

Конечные пользователи могут завершать работу окна с помощью многочисленных встроенных приемов уровня системы (например, щелкнув на кнопке закрытия X внутри рамки окна) или вызвав метод

Close
в ответ на некоторое действие с интерактивным элементом (скажем, выбор пункта меню File Exit (Файл Выход)). Инфраструктура WPF предлагает два события, которые можно перехватывать для выяснения, действительно ли пользователь намерен закрыть окно и удалить его из памяти. Первое такое событие —
Closing
, которое работает в сочетании с делегатом
CancelEventHandler
.

Поделиться:
Популярные книги

Запасная дочь

Зика Натаэль
Фантастика:
фэнтези
6.40
рейтинг книги
Запасная дочь

Идеальный мир для Лекаря 7

Сапфир Олег
7. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 7

Мастер 6

Чащин Валерий
6. Мастер
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер 6

Кодекс Охотника. Книга IV

Винокуров Юрий
4. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга IV

Архил...?

Кожевников Павел
1. Архил...?
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Архил...?

Ну привет, заучка...

Зайцева Мария
Любовные романы:
эро литература
короткие любовные романы
8.30
рейтинг книги
Ну привет, заучка...

Барон диктует правила

Ренгач Евгений
4. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон диктует правила

На изломе чувств

Юнина Наталья
Любовные романы:
современные любовные романы
6.83
рейтинг книги
На изломе чувств

Охота на эмиссара

Катрин Селина
1. Федерация Объединённых Миров
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Охота на эмиссара

На границе империй. Том 7. Часть 2

INDIGO
8. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
6.13
рейтинг книги
На границе империй. Том 7. Часть 2

Король Масок. Том 1

Романовский Борис Владимирович
1. Апофеоз Короля
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Король Масок. Том 1

Релокант

Ascold Flow
1. Релокант в другой мир
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Релокант

Адмирал южных морей

Каменистый Артем
4. Девятый
Фантастика:
фэнтези
8.96
рейтинг книги
Адмирал южных морей

Возвышение Меркурия. Книга 17

Кронос Александр
17. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 17