API は、スレッド化 (以下を参照) やアクティブなドキュメントを閉じる方法を公式にはサポートしていません。とはいえ、アクティブなドキュメントを閉じるための回避策は...を呼び出すことです...
SendKeys.SendWait("^{F4}");
・・・別スレより。いくつかのドキュメントを開いたり閉じたりすることをループする必要があることを除いて、それはうまくいきます。スレッドの後にコードを配置すると、前のドキュメントを閉じる前に実行されます。私はいくつかの標準的なスレッドコールバックメソッドを試しました...
Task.Factory.StartNew(() =>
ThreadPool.QueueUserWorkItem(new WaitCallback
AutoResetEvent.WaitOne()
運がない。そして Thread.Sleep() はエラー/クラッシュを停止するだけです。誰にもアイデアはありますか。
「Revit の内部では、いくつかの選択された孤立した場所でのみマルチプロセッシングを利用しています。現在、これらの場所のいずれにも、Revit API のコードまたはその一部が含まれていません。したがって、オートデスクは、同時に実行されている内部から Revit API を呼び出すことをお勧めしません。並列スレッド. Revit API の一部は、テスト環境でそのようなスレッド化コード内から正常に実行できるように十分に分離されている場合があります. これは、同じソース コードが任意のスレッドに対して機能することを保証するものではありません.モデルまたは状況、または Revit の将来の変更によってこのコードが機能しなくなることはありません。」
public void OpenFile()
{
for (int i = 0; i < 3; i++)
{
uiApp.OpenAndActivateDocument(TargetPath(i));
ThreadPool.QueueUserWorkItem(CloseDocProc);
//any code here at all opens the next doc without closing the last
}
}
public void CloseDocProc(object stateInfo)
{
SendKeys.SendWait("^{F4}");
//can run code here
}