Программа C# .NET8 не завершает работу, когда должнаC#

Место общения программистов C#
Ответить
Anonymous
 Программа C# .NET8 не завершает работу, когда должна

Сообщение Anonymous »

Я работаю над программой на C# .NET8. Он предназначен для работы либо как приложение Windows Forms, либо для пропуска формы и запуска в автоматическом режиме. Цель программы — подключиться к SFTP-сайту, загрузить все доступные файлы на локальный компьютер, разархивировать их и поместить в определенную папку. В большинстве случаев ему придется делать это самостоятельно, но иногда мне может потребоваться запустить его вручную, если ранее он не запускался или на сайт SFTP были переброшены новые данные, которые мне нужно получить. Обычно в моем отделе большинство наших автоматизированных программ пишутся с интерфейсом Windows Forms именно по этой причине.
Чтобы вызвать автоматический режим, он запускается в Windows. планировщик задач как запланированное задание и передает аргумент командной строки («AUTO»), указывающий, что форма не нужна. В файле Program.cs, если аргументы командной строки содержат «AUTO», он передает это значение как логическое значение в строку «Application.Run», т. е. Application.Run(new SomeProgramNameHere(automated)); (где «automated» — логическое значение).
Когда я создаю экземпляр SomeProgramNameHere(), это выглядит так:

Код: Выделить всё

public SomeProgramNameHere(bool Automatic = false)
{
InitializeComponent();
AutoMode = Automatic;
Log = new Logging("SomeProgramNameHere");
WriteToLog("STARTUP1.0", "SomeProgramNameHere", "This process Launched.");
if (AutoMode)
{
MainProcess();
WriteToLog("STARTUP1.1", "SomeProgramNameHere", "Exit from automated process.");
Application.Exit();
WriteToLog("STARTUP1.2", "SomeProgramNameHere", "Why didn't I exit?.");
}
}
Фактическая работа выполняется в методе MainProcess(). Когда программа входит в SomeProgramNameHere(), она должна выполнить обычный шаг InitializeComponent(), затем установить переменную класса AutoMode (Boolean) на основе переданного значения (это также используется в других местах программы), создать экземпляр процесса регистрации, записать строка в журнале, сообщающая о том, что он запущен, затем, предполагая, что он запущен в автоматическом режиме, переходит в метод MainProcess.
Сразу после MainProcess() изначально был метод Application.Exit(). линия. Когда я собрал его и поместил на сервер для тестирования, запланированное задание запустилось, нормально записалось в журнал, но на самом деле не завершилось. Просмотр планировщика задач показал, что он все еще работает, хотя и достиг последнего шага метода MainProcess().
Я добавил две дополнительные строки журнала, показанные выше. Это поражает их обоих. Итак, он возвращается из MainProcess(), попадает в строку журнала с надписью «STARTUP1.1», а затем попадает в строку с надписью «STARTUP1.2». Если он попадает в эту последнюю строку, он должен нажимать на Application.Exit(), но не завершается.
Если я добавляю метод загрузки формы и помещаю туда выход приложения (if (AutoMode) { Application.Exit(); } ), но я не понимаю, почему он вообще должен использовать метод загрузки формы.
Я запустил это своим руководителем и он тоже был в тупике.
Я предполагаю, что допускаю здесь какую-то идиотскую фундаментальную ошибку, но не уверен, какую именно.

Подробнее здесь: https://stackoverflow.com/questions/784 ... -it-should
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»