Revit:EventHandler中的TaskDialog

时间:2017-08-08 12:23:01

标签: eventhandler revit

我正在尝试重复以下Autodesk示例: http://help.autodesk.com/view/RVT/2016/ENU/?guid=GUID-CEF0F9C9-046E-46E2-9535-3B9620D8A170

当我启动插件时,我正在完全恢复崩溃。在调试模式下,visual studio指向这一行:“TaskDialogResult result = taskDialog.Show();” - RevitAPIUI.dll中出现未处理的“System.StackOverflowException”类型异常

public class Application_DialogBoxShowing : IExternalApplication
{
        // Implement the OnStartup method to register events when Revit starts.
        public Result OnStartup(UIControlledApplication application)
        {
                // Register related events
                application.DialogBoxShowing += 
        new EventHandler<Autodesk.Revit.UI.Events.DialogBoxShowingEventArgs>(AppDialogShowing);
                return Result.Succeeded;
        }

        // Implement this method to unregister the subscribed events when Revit exits.
        public Result OnShutdown(UIControlledApplication application)
        {

                // unregister events
                application.DialogBoxShowing -= 
        new EventHandler<Autodesk.Revit.UI.Events.DialogBoxShowingEventArgs>(AppDialogShowing);
                return Result.Succeeded;
        }

        // The DialogBoxShowing event handler, which allow you to 
        // do some work before the dialog shows
        void AppDialogShowing(object sender, DialogBoxShowingEventArgs args)
        {
                // Get the help id of the showing dialog
                int dialogId = args.HelpId;

                // Format the prompt information string
                String promptInfo = "A Revit dialog will be opened.\n";
                promptInfo += "The help id of this dialog is " + dialogId.ToString() + "\n";
                promptInfo += "If you don't want the dialog to open, please press cancel button";

                // Show the prompt message, and allow the user to close the dialog directly.
                TaskDialog taskDialog = new TaskDialog("Revit");
                taskDialog.MainContent = promptInfo;
                TaskDialogCommonButtons buttons = TaskDialogCommonButtons.Ok |
                                         TaskDialogCommonButtons.Cancel;
                taskDialog.CommonButtons = buttons;
                TaskDialogResult result = taskDialog.Show();
                if (TaskDialogResult.Cancel == result)
                {
                        // Do not show the Revit dialog
                        args.OverrideResult(1);
                }
                else
                {
                        // Continue to show the Revit dialog
                        args.OverrideResult(0);
                }
        }
}

1 个答案:

答案 0 :(得分:0)

使用&#34; MessageBox&#34;而不是&#34; TaskDialog&#34;。 呼叫&#34; TaskDialog&#34;在AppDialogShowing中导致溢出。