Domanda

Vorrei chiudere correttamente alcuni socket ed essere in grado di dire al server che stiamo chiudendo, ma se l'applicazione viene chiusa, i socket vengono tutti chiusi e in alcuni casi i file vengono lasciati bloccati. Come posso eseguire un metodo quando la mia applicazione è chiusa?

Questo andrà in una libreria che verrà utilizzata in un'app di moduli.

È stato utile?

Soluzione

Vorrei implementare IDisposable sulle classi che utilizzano queste risorse. Dispose può quindi essere chiamato esplicitamente da qualsiasi metodo di arresto supportato dal tipo di applicazione (OnFormClose, OnStop, Application_End, ...).

Altri suggerimenti

Se si tratta di un'applicazione Windows Form, è possibile concentrarsi sul modulo, fare clic sul fulmine eventi nella finestra delle proprietà e utilizzare l'evento Chiusura modulo.

this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(OnFormClosing);

private void OnFormClosing(object sender, FormClosingEventArgs e)
{
    // Your socket logic here
}

Inoltre, se è necessario intercettare il modulo in fase di chiusura, impostare la proprietà Cancel su true:

e.Cancel = true;

Stai parlando di un'app WinForms? In tal caso, utilizzare FormClosing event sul modulo principale.

Non sono sicuro che sia il posto migliore, ma puoi dire che il tuo processo sta chiudendo agganciando AppDomain.ProcessExit . Va bene per la pulizia, ma non credo sia un buon momento per inviare messaggi. :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top