7 votos

¿Es posible modificar el ArcObjects IProgressDialog2?

Resulta que la mejor manera de ejecutar las tareas largas en ArcMap es el uso de la IProgressDialog2. El BackgroundWorker en combinación con ArcObjects (STA Hilos) es un desastre.

Sin embargo, parece que la única aplicación de ESRI es el IStepProgressor. En mi caso no lo necesito y no quiero mostrar una barra de progreso. Por otra parte, no necesito el botón de cancelar. Es allí una manera de eliminar tanto las cosas? Sólo quiero el texto y el círculo como se puede ver en mi pantalla my progress dialog

public static void ShowProgressDialog<T>(string message, Action<T> action, T arg)
    {

        ESRI.ArcGIS.esriSystem.ITrackCancel trackCancel = new ESRI.ArcGIS.Display.CancelTrackerClass();

        ESRI.ArcGIS.Framework.IProgressDialogFactory progressDialogFactory = new ESRI.ArcGIS.Framework.ProgressDialogFactoryClass();

        // Set the properties of the Step Progressor
        System.Int32 int32_hWnd = ArcMap.Application.hWnd;
        ESRI.ArcGIS.esriSystem.IStepProgressor stepProgressor = progressDialogFactory.Create(trackCancel, int32_hWnd);


        ESRI.ArcGIS.Framework.IProgressDialog2 progressDialog2 = (ESRI.ArcGIS.Framework.IProgressDialog2)stepProgressor; // Explict Cast

        progressDialog2.CancelEnabled = false;
        progressDialog2.Description = message;
        progressDialog2.Animation = ESRI.ArcGIS.Framework.esriProgressAnimationTypes.esriProgressSpiral;

        action.Invoke(arg);

        trackCancel = null;
        progressDialog2.HideDialog();
        progressDialog2 = null;

    }

5voto

lepole Puntos 1588

Estoy de acuerdo sobre el uso de la IProgressDialog2 con ArcGIS sobre otros métodos para mostrar el progreso. Siempre parece más fiable. Yo a menudo lo utilizan para las consultas de larga ejecución donde quiero dar al usuario la posibilidad de cancelar pero no sé cuánto tiempo tomará la consulta. En estos casos yo instanciar el cuadro de diálogo tal y como lo haces, pero antes de llamar a la acción, yo simplemente ocultar el paso progresores. El resto del cuadro de diálogo de la función y aparecer como normales. Agregar esta justo antes de invocar la acción:

stepProgressor.Hide();
progressDialog2.ShowDialog();

No sé de una manera de eliminar el botón de cancelar.

0voto

Paul Puntos 555

Fundido el ProgressDialog como IProgressor a .Hide el progressor. Fundido a IProgressDialog para establecer CancelEnabled en true.

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