2017-08-08 7 views
-1

Je suis en train de répéter suivant Autodesk Exemple: http://help.autodesk.com/view/RVT/2016/ENU/?guid=GUID-CEF0F9C9-046E-46E2-9535-3B9620D8A170Revit: TaskDialog intérieur EventHandler

Je reçois un accident complet de Revit quand je commence la Addin. En mode de débogage Visual Studio pointe cette ligne: "TaskDialogResult result = taskDialog.Show();" - Une exception non gérée du type 'System.StackOverflowException' a eu lieu dans RevitAPIUI.dll

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); 
       } 
     } 
} 

Répondre

0

Utilisez "MessageBox" au lieu de "TaskDialog". L'appel de "TaskDialog" dans AppDialogShowing entraîne un débordement.