如何为 Revit 编写多线程插件?

a.t*_*aby 0 c# multithreading revit-api

对于Revit插件,我编写了以下代码:

public Result Execute(ExternalCommandData commandData,
                       ref string message, ElementSet elements)
    {
        try
        {
            Global.GetInstance(commandData);
            message = "Studio Launcher";
            var mw = new MainWindow();
            mw.ShowDialg();
        }
        catch (Exception)
        {
            TaskDialog.Show("Failure", "Please Open or Create a document");
            return Result.Failed;
        }
        return Result.Succeeded;
    }
Run Code Online (Sandbox Code Playgroud)

在这个插件中MainWindow有一个用户界面,用户可以与之交互,并且一些交易在那里发生。
它很有魅力,但形式不是无模式的,因为插件与其Revit本身位于同一线程中。为了提供无模式窗口,我将其更改mw.ShowDialg();mw.Show();. 尽管插件成功启动并且 MainWindow 变为无模式并且用户能够同时与插件和 Revit 交互,但当我在 MainWindow 中打开事务时,Revit 崩溃,因为 Execute() 方法在打开该事务之前终止。

如果有任何方法可以为 Revit 开发多线程插件,请帮助我。

Mat*_*att 6

有关该主题的详细讨论列表,请参阅Building Coder 博客。如果您希望能够拥有一个无模式对话框,那么可以使用外部事件或空闲事件。但是,如果您希望同时运行多个线程,那么您就不走运了,因为 Revit API 不允许这样做。