2015-07-18 3 views

Répondre

7

En utilisant ma boule de cristal psychique magique pour vous deviner demandez comment éviter ce message d'erreur dans vos plugins Revit/RPS, voici un petit peu d'informations supplémentaires:

  • tous les appels API Revit devraient se produire à l'intérieur du « contexte de l'API »
  • ce « contexte de l'API » vit dans un fil spécial
  • vous accédez probablement l'API d'un autre thread
  • cela se produit souvent lorsque vous faites une Form et appelez dans l'API de l'un des Les événements (Button.OnClick)

Ce que vous voulez faire est de comprendre comment revenir dans le contexte API pour exécuter votre code. Il existe deux méthodes principales pour ce faire (en supposant que vous avez déjà quitté le contexte IExternalCommand.Execute):

  • sondages pour les travaux dans l'événement Idling
  • en utilisant un ExternalEvent

Puisque vous avez mentionné RevitPythonShell dans la tags, pourquoi ne pas vérifier comment j'ai utilisé external events in my web server example.

  • créer un IExternalEventHandler
  • mettre en œuvre sa méthode Execute
  • (la méthode Execute exécute dans le contexte de l'API Revit)
  • créer un ExternalEvent (en utilisant le gestionnaire d'événements vient d'être créé)
  • lorsque vous avez besoin pour faire quelque chose dans le contexte API Revit, notifier l'événement externe (my_external_event.Raise())
+0

> ce "contexte API" vit dans un fil spécial: C'est le fil de l'interface utilisateur, rien de spécial ici. > cela arrive souvent lorsque vous créez un formulaire: Un formulaire non modal, car un modal ne peut pas quitter le contexte API – Maxence

+1

De plus, et pour plus de détails, The Building Coder fournit un groupe de sujet complet sur ce sujet: http: //thebuildingcoder.typepad.com/blog/about-the-author.html#5.28 –