Revit SDK 介绍:多线程计算 MultithreadedCalculation

前言

Revit 对于多线程,说实话支持的并不好。不过如果真的要用,也不是没有办法。本文以 SDK 的例子 MultithreadedCalculation 做个介绍。

MultithreadedCalculation

如果是 Revit API 初学者,建议不要看我这篇博客。下面只有几个我认为的关键点,详细逻辑不难,但是有点多,就不写了。
功能本质是 C# 的最基本的 Thread 多线程,且是单纯的计算。

Thread thread = new Thread(new ThreadStart(container.Run));
thread.Start();

在线程中的计算 , ResultsData 是自定义的类,与 Revit API 无关:

void Calculate()
{
   foreach (UV uv in m_uvToCalculate)
   {
      if (m_stop)
      {
         m_uvToCalculateCount = 0;
         return;
      }
      // Lock access to results while the data is added
      lock (results)
      {
         results.Add(new ResultsData(uv, 1000 * Math.Sin(Math.Abs(uv.U * uv.V))));
         Thread.Sleep(500); // to simulate the effect of a complex computation
         m_uvToCalculateCount--;
      }
   }
}

这个例子逻辑有点绕,主要是因为用到了 IUpdaterIdling 事件。另外,这个例子还有一个 bug,你需要自己先创建两个分析显示样式,否则,看不到效果。

结论

Revit 这种多线程实际上没太大意义,因为 Revit API 不支持多线程。No Multithreading in Revit

你可能感兴趣的:(Revit,SDK,介绍)