В IOS5 вы можете использовать NSJSONSerialization для сериализации JSON.
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
Использование события FormClosing должно перехватить любой способ закрытия формы.
В представлении «Дизайн» для вашей формы в окне «Свойства» нажмите кнопку «События» и прокрутите вниз до событий «FormClosed» и «FormClosing».
FormClosed вызывается после формы закрывается.
FormClosing вызывается перед закрытием формы, а также позволяет отменить закрытие, оставив форму открытой:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
}
FormClosing / FormClosed позволяет вам наблюдать за событием для этой формы, которое может совпадать с выходом из приложения. Однако есть еще одно событие, которое вы можете подключить, под названием Application.ApplicationExit.
В методе Main:
Application.ApplicationExit += Application_ApplicationExit;
...
private static void Application_ApplicationExit(object sender, EventArgs e) {
// do stuff when the application is truly exiting, regardless of the reason
}
Если вы хотите спросить пользователя: «Вы действительно хотите закрыть эту форму?», Используйте FormClosing
, где вы можете установить Cancel = True
, и форма останется открытой.
Если вы хотите закрыть какой-либо ресурс только тогда, когда форма определенно закрыта, используйте событие FormClosed
.
Если вы контролируете весь код, тогда это не имеет значения. Но чего вы не хотите, так это очистки ресурсов с помощью FormClosing
, когда другой обработчик события будет держать форму открытой.
Этот код фиксирует пользователя, щелкающего «X» или использующего Alt-F4 в форме, чтобы вы могли что-то сделать. Мне пришлось использовать это, потому что мне нужно было действие для вызова моего закрывающего события, и оно не вызывало бы его при использовании FormClosing Event из-за гонок.
/// <summary>
/// This code captures the 'Alt-F4' and the click to the 'X' on the ControlBox
/// and forces it to call MyClose() instead of Application.Exit() as it would have.
/// This fixes issues where the threads will stay alive after the application exits.
/// </summary>
public const int SC_CLOSE = 0xF060;
public const int WM_SYSCOMMAND = 0x0112;
protected override void WndProc(ref System.Windows.Forms.Message m)
{
if (m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_CLOSE)
MyClose();
base.WndProc(ref m);
}