Tengo una aplicación .Net 3.5 C# Winforms. No tiene GUI como tal, solo NotifyIcon con ContextMenu.Problema con NotifyIcon no desaparece de la aplicación Winforms
He tratado de establecer el NotifyIcon como visible = false y disponer de ella en caso Application_Exit, de la siguiente manera:
if (notifyIcon != null)
{
notifyIcon.Visible = false;
notifyIcon.Dispose();
}
La aplicación obtiene al código dentro de los corchetes, pero lanza una referencia nula excepción cuando intenta establecer Visible = falso.
He leído en algunos lugares para ponerlo en el evento de cierre del formulario, pero ese código nunca se ve afectado (¿tal vez porque no tengo un formulario que se muestre como tal?).
¿Dónde puedo poner este código para que realmente funcione? Si no lo coloco, obtengo el molesto ícono persistente en la bandeja hasta que mueva el mouse sobre él.
Saludos.
EDITAR
Sólo algo extra me he dado cuenta ...........
estoy usando ClickOnce en la aplicación ....... ..si acabo de salir de la aplicación a través del ContextMenu en NotifyIcon, no se registra ninguna excepción.
Justo cuando el evento Application_Exit es despedido después de la applicaiton ha comprobado para una actualización aquí ..
private void CheckForUpdate()
{
EventLogger.Instance.LogEvent("Checking for Update");
if (ApplicationDeployment.IsNetworkDeployed && ApplicationDeployment.CurrentDeployment.CheckForUpdate())
{
EventLogger.Instance.LogEvent("Update available - updating");
ApplicationDeployment.CurrentDeployment.Update();
Application.Restart();
}
}
¿Esto ayuda?
realidad, ahora que lo pienso, me gustaría recomendar en contra de usar este evento para esto porque es posible tener varios Application.Run() bucles de ir en diferentes subprocesos y todos activarán un evento de Salida que podría hacer que el ícono desaparezca prematuramente. –
Totalmente de acuerdo con usted! Prefiero no usar este evento en mis aplicaciones para ningún propósito de limpieza. Sin embargo, es la respuesta más simple a la pregunta "por qué este código arroja una excepción". En cuanto a mis ideas de cómo diseñar este código de otra manera, podría proponer crear una clase desechable envoltorio alrededor de notifyIcon, por lo que controlará la vida útil de notifyIcon. y luego escriba usando (nuevo NotifyIconController()) {Application.Run()}; o algo como esto –