WinForms Close事件后,Revit API外部命令冻结

问题描述

我正在尝试为Revit创建一个外部命令,该命令会弹出一个带有单个文本框的Windows窗体,供用户输入描述。用户单击“确定”后,该窗体关闭,但Revit卡在加载动作中。它不会冻结,它只是不断地加载某些东西。当我暂停调试时,代码仅将其设置为form.ShowDialog()行。如果我取出showdialog并仅在不使用表单的情况下运行它,那么它将运行正常。

我将在下面发布我的相关代码段。表单位于自己的.cs中,与外部命令.cs分开,但仍在同一命名空间下。

表单点击事件代码:

private void CancelForm(object sender,EventArgs e)
{
    isReport = false;
    this.DialogResult = DialogResult.Cancel;
    Close();
}

private void SubmitForm(object sender,EventArgs e)
{
    isReport = true;
    reportDesc = descriptionBox.Text;
    this.DialogResult = DialogResult.OK;
    Close();
}

执行命令:

    public Result Execute(ExternalCommandData commandData,ref string message,ElementSet elements)
    {
        //Get application and document objects
        UIApplication uiapp = commandData.Application;
        Document doc = uiapp.ActiveUIDocument.Document;
        ReportForm ticket = new ReportForm();
        ticket.ShowDialog();

代码在showdialog之后停止处理。从我能读到的内容来看,我认为这可能与关闭表单后关闭Revit或无法正确关闭表单但无法弄清楚如何解决它有关。

任何帮助将不胜感激!

解决方法

这是一个旧示例,该示例动态创建了一个最小的Windows窗体,将其显示为模式窗体,然后成功关闭:The Schedule API and Access to Schedule Data。也许会有所帮助。也许调试器以某种方式干扰了表单的关闭?

,

我最终重新制作了整个插件,并确保我使用的是Jeremy Tammik的Revit插件向导来启动它,然后它开始工作。不完全确定是什么原因解决了问题,但猜测它在设置等方面存在错误。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...