Код в Main() доступен или недоступен в зависимости от открытия другой формы
У меня есть приложение для карманных ПК, и у меня возникла серьезная проблема, описанная здесь: https://stackru.com/questions/472598. В поисках решения я попробовал довольно глупый код в Main():
[MTAThread]
static void Main()
{
Application.Run(new Tasks());
Application.Exit();
}
и установите точку останова на выходе. если я просто запускаю приложение и затем закрываю окно, достигается точка останова. если я запускаю приложение, а затем открываю другое окно:
private void questButton_Click(object sender, EventArgs e)
{
QuestionnairesWindow questWindow = new QuestionnairesWindow();
questWindow.Show();
this.Hide();
}
и затем вернитесь из него в начальное окно:
private void backButton_Click(object sender, EventArgs e)
{
Tasks tasksWindow = new Tasks();
tasksWindow.Show();
this.Close();
}
и закройте исходное так же, как в первый раз, код Apllication.exit() никогда не достигается, и у меня создается впечатление, что приложение на самом деле не закрыто (я не могу открыть его снова). извините, если описание сложное
редактировать: вопрос - есть идеи, почему он ведет себя по-другому?
3 ответа
new Tasks()
в Main()
это не тот же объект с Tasks tasksWindow = new Tasks();
У вас есть 2 объекта задач, поэтому закрытие второго, первого по-прежнему присутствует и никогда не умирает. Вам нужно перейти на QuestionnairesWindow
эталон тока Tasks
,
Вы можете сделать это с дополнительными QuestionnairesWindow
конструктор:
private Tasks tasks;
public QuestionnairesWindow(Tasks t)
{
this.tasks = t;
}
с помощью:
new QuestionnairesWindow(this).Show(); // where this = current `Tasks` created in `Main`
Эта строка, кажется, проблема:
Tasks tasksWindow = new Tasks();
Если я правильно понимаю ваш код, в вашем backButton_Click вы создаете новый экземпляр формы "Задачи" вместо того, чтобы показывать тот, который вы изначально скрыли. Это означает, что приложение никогда не завершает работу, потому что все еще одно окно открыто, но скрыто.
Что вы, вероятно, хотите сделать, это передать ссылку формы Задачи в форму Анкета Окна.
Проблема, с которой вы столкнулись, заключается в том, что в backButton_Click вы создаете новый экземпляр окна задач. Оригинальное окно задач все еще работает, оно просто скрыто. Я подозреваю, что вам нужно передать ссылку на исходную форму "Задачи" в окно "Анкеты", чтобы он мог выбрать ее снова.
Вам либо нужно добавить публичный / внутренний метод в ваше QuestionnairesWindow, в котором вы устанавливаете, какая форма задач запускает открытие QuestionnairesWindow. Вы вызываете этот метод в questButton_Click с ссылкой this перед вызовом this.Hide(). Эта ссылка будет храниться в закрытой переменной в окне QuestionnairesWindow.
Затем в backButton_Click вы используете эту приватную переменную для вызова метода.Show(), чтобы показать родительскую форму.