В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
Из MSDN:
Сообщает все насосы сообщений, которые они должны завершать, а затем закрывает все окна приложений после сообщения были обработаны. Это код для использования, если вы вызвали Application.Run (приложения WinForms), этот метод останавливает все запущенные петли сообщений во всех потоках и закрывает все окна приложения.
Завершает этот процесс и дает базовой операционной системе указанный код выхода. Это код, который вызывается при использовании консольного приложения.
В этой статье Application.Exit vs. Environment.Exit указывает на хороший совет:
Вы можете определить, был ли вызван
System.Windows.Forms.Application.Run
, проверяя свойствоSystem.Windows.Forms.Application.MessageLoop
. Если true, то вызывается Run, и вы можете предположить, что приложение WinForms выполняется следующим образом.if (System.Windows.Forms.Application.MessageLoop) { // WinForms app System.Windows.Forms.Application.Exit(); } else { // Console app System.Environment.Exit(1); }
В этом случае наиболее подходящий способ выхода из приложения для переопределения метода onExit () в App.xaml.cs:
protected override void OnExit(ExitEventArgs e) {
base.OnExit(e);
}
Environment.Exit(exitCode); //exit code 0 is a proper exit and 1 is an error
Вы делаете:
Application.Run(myForm);
в вашем Main ()?
Я нашел это очень простым способом убить приложение, когда форма закрыта.
Я знаю, что это не проблема, с которой вы столкнулись, однако другая причина, по которой это может произойти, заключается в том, что у вас есть нефонический поток, открытый в вашем приложении.
using System;
using System.Threading;
using System.Windows.Forms;
namespace Sandbox_Form
{
static class Program
{
private static Thread thread;
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
thread = new Thread(BusyWorkThread);
thread.IsBackground = false;
thread.Start();
Application.Run(new Form());
}
public static void BusyWorkThread()
{
while (true)
{
Thread.Sleep(1000);
}
}
}
}
Когда IsBackground
есть false
, это будет поддерживать вашу программу открытой до тех пор, пока поток не завершится, если вы установите IsBackground
на true
, нить не остановит программу. Такие вещи, как BackgroundWoker
, ThreadPool
и Task
, внутренне используют поток с IsBackground
, установленным на true
.
Кстати. когда мои формы называют событием закрытия формы или формы, я закрываю приложение с помощью функции this.Hide (). Это влияет на то, как сейчас работает мое приложение?
blockquote>Короче говоря, да. Вся заявка закончится, когда основная форма (форма, запущенная с помощью
Application.Run
в методеMain
) закрыта (не скрыта).Если ваше приложение всегда должно полностью завершаться всякий раз, когда ваша основная форма закрывается, тогда вы должны просто удалить эту форму закрытым обработчиком. Не отменяя это событие и просто позволяя им закрываться, когда пользователь его закрывает, вы получите желаемое поведение. Что касается всех других форм, если вы не собираетесь снова показывать тот же самый экземпляр формы, вы просто просто закрываете их, а не предотвращаете закрытие и скрываете их. Если вы показываете их снова, то их скрытие может быть прекрасным.
Если вы хотите, чтобы пользователь нажал кнопку «x» для вашей основной формы, но оставил другую форму открытой и в эффект, становится «новой» основной формой, то это немного сложнее. В таком случае вам нужно просто скрыть свою основную форму, а не закрыть ее, но вам нужно будет добавить какой-то механизм, который фактически закрывает основную форму, когда вы действительно хотите, чтобы ваш приложение до конца. Если это та ситуация, в которой вы находитесь, вам нужно будет добавить дополнительные сведения к вашему вопросу, описывающие, какие типы приложений должны и на самом деле не должны заканчиваться.
Все, что вам нужно, это System.Environment.Exit(1);
И оно использует системное пространство имен «using System», которое почти всегда существует, когда вы запускаете проект.
Я хотел бы либо одно из следующего:
Application.Exit ();
blockquote>для winform или
Environment.Exit (0);
blockquote>для консольного приложения (также работает на winforms).
Спасибо!
Application.Exit()
не удалось выйти из приложения, однакоEnvironment.Exit(1)
работал как шарм. – Dib 11 August 2017 в 10:51Environment.Exit(0)
Любое ненулевое значение предназначено для кода ошибки приложения, который может использоваться сценарием для принятия соответствующих мер. (Это новый код и приложение WinForms, поэтому вряд ли это будет иметь значение в этом случае, но полезно знать, кто пишет инструменты командной строки). – YipYip 20 June 2018 в 19:00