【问题标题】:Revit API External Command freezing after WinForms Close() eventWinForms Close() 事件后 Revit API 外部命令冻结
【发布时间】:2020-12-25 14:17:21
【问题描述】:

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

我将在下面发布我的相关代码 sn-ps。该表单位于其自己的 .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 或表单未正确关闭但不知道如何修复它有关。

任何帮助将不胜感激!

【问题讨论】:

  • 只是想补充一点,我在 try/catch 下拥有它,并且脚本的任何部分都没有收到任何错误。它不会失败,只是不会前进。

标签: c# winforms api revit


【解决方案1】:

我最终重新制作了整个插件,确保我使用 Jeremy Tammik 的 Revit 插件向导来启动它,然后它开始工作。不完全确定是什么修复了它,但猜测它是设置中的一些错误等。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 感谢杰里米的回复。也许我遗漏了一些东西,但在您提供的链接中没有表单或任何代码的结束事件。我浏览了你的几篇帖子,包括关于 Revit 需要关注的帖子,并认为我的问题可能就在那里,但老实说,我已经不知道了。
    • 点击事件正在工作,我假设因为在我点击确定按钮后表单将关闭。看起来 Revit 在事件发生后立即开始加载,但我不知道 Revit 在表单关闭后试图做什么。
    • 如果您只是让 Windows 窗体做它的事情而没有进一步的干扰,它会自行关闭。在编程中,顺其自然是最容易的,而不是逆流而上。 KISS!
    • 您能再解释一下吗?我认为表格很简单。它只是一个带有确定按钮的文本框。我需要的只是用户在文本框中输入的任何内容,以便稍后在脚本中输入内容。对于表单,它唯一的事件就是关闭表单。
    猜你喜欢
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多