10 votos

ArcGIS 10 complemento: Manejo de excepciones de nivel superior

El complemento de ArcGIS 10 en el que estoy trabajando es bastante simple: solo un control de herramientas y una ventana acoplable. Estoy manejando las excepciones específicas que anticipadas que pueden ocurrir y lanzando todo lo demás, pero ¿cuál es la mejor práctica para manejar esas excepciones inesperadas en el marco del complemento?

Actualmente solo hago un catch (System.Exception ex) y lo muestro en un MessageBox en cada método que no tiene un método de nivel superior en el que podría manejarlo, pero esto no parece ser la mejor práctica (y, por supuesto, FxCop está quejándose al respecto).

¿Existe alguna facilidad en el marco del complemento de ArcGIS 10 para conectar un controlador de excepciones de nivel superior, por ejemplo a los eventos Application.ThreadException o AppDomain.UnhandledException?

Dado que los complementos son solo bibliotecas de clases y no aplicaciones sin acceso al código de inicio de la aplicación subyacente (por lo que entiendo, esos eventos deben estar conectados muy temprano en el proceso de inicio), supongo que no, pero pensé en preguntar si algún experto tenía alguna sugerencia sobre cómo deberían manejarse las excepciones "inesperadas" en los complementos.

7voto

DiogoNeves Puntos 133

Por lo que puedo decir, estás implementando el manejo de errores que ESRI está promoviendo actualmente como mejor práctica. Si lograras capturar las excepciones no controladas de la aplicación (ArcMap), podrías potencialmente mostrar mensajes sobre errores que no forman parte de tu AddIn. La mayoría de los AddIns que escribas probablemente serán botones y realmente solo tienen dos rutas principales donde se pueden capturar y mostrar errores inesperados (onClick y onUpdate).

Recuerda utilizar 'throw' en lugar de 'throw ex'. Hay una pequeña diferencia, pero resulta en mantener la genealogía del error a medida que asciende desde las funciones llamadas.

2voto

Tim C Puntos 25946

Estoy trabajando con un complemento de ArcGIS. Mi complemento consiste en una ventana acoplable y un control de herramientas. Estoy tratando de llevar un registro de los bloqueos de ArcGIS debido a mi herramienta. Y he tenido algo de éxito en el manejo de excepciones de nivel superior utilizando Application.ThreadException. Como la excepción de hilo solo funciona para el hilo de la interfaz de usuario, después de instanciar la ventana acoplable, cualquier excepción que pueda ser la causa de un bloqueo en ArcGIS, la captura, pero no funciona antes de instanciar la ventana acoplable.

    public class AddinImpl : ESRI.ArcGIS.Desktop.AddIns.DockableWindow
    {
        private WatershedDelineationDockableWindow m_windowUI;

        public WatershedDelineationDockableWindow GetUI
        {
            get
            {
                return m_windowUI;
            }
        }

        public AddinImpl()
        {
            Application.ThreadException += MYThreadHandler;
            Log.Info("Creando ventana acoplable.");
        }

        static void MYThreadHandler(object sender, ThreadExceptionEventArgs e)
        {
            Log.Error("Error no controlado en el hilo " + e.Exception.ToString());
            MessageBox.Show("Error no controlado en el hilo " + e.Exception.ToString());
        }

        protected override IntPtr OnCreateChild()
        {
            m_windowUI = new WatershedDelineationDockableWindow(this.Hook);
            return m_windowUI.Handle;
        }

        protected override void Dispose(bool disposing)
        {
            if (m_windowUI != null)
                m_windowUI.Dispose(disposing);

            base.Dispose(disposing);
            Log.Info("Cerrando ventana acoplable ");
        }
    }

Esto maneja las excepciones de nivel superior después de instanciar la interfaz de usuario

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X