Quando il mio codice tenta di creare una nuova istanza di Microsoft.Office.Interop.PowerPoint.Application
, a volte ottengo la seguente eccezione:Come evitare le eccezioni RPC_E_CALL_REJECTED quando si esegue l'automazione di PowerPoint?
System.Runtime.InteropServices.COMException (0x80010001): Retrieving the COM class factory for component with CLSID {91493441-5A91-11CF-8700-00AA0060263B} failed due to the following error: 80010001 Call was rejected by callee. (Exception from HRESULT: 0x80010001 (RPC_E_CALL_REJECTED)).
at System.Runtime.Remoting.RemotingServices.AllocateUninitializedObject(RuntimeType objectType)
at System.Runtime.Remoting.Activation.ActivationServices.CreateInstance(RuntimeType serverType)
at System.Runtime.Remoting.Activation.ActivationServices.IsCurrentContextOK(RuntimeType serverType, Object[] props, Boolean bNewObj)
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
dico a volte perché non capita sempre dato anche lo stesso ingresso. Inoltre, si verifica anche (con la stessa mancanza di coerenza) in altre parti del mio codice in cui interagisco anche con l'API di automazione di PowerPoint.
Ho provato la soluzione this da MSDN stessa che sembra essere la soluzione più consigliata. Tuttavia, non sembra avere alcun impatto poiché osservo ancora lo stesso comportamento.
Le mie domande sono:
- funziona la soluzione di MSDN per l'automazione di PowerPoint?
- Come posso verificare se l'ho applicato correttamente al mio codice?
- Qualcuno ha una soluzione alternativa?
Sto usando C#, .NET 4 e PowerPoint 2007.
Sto incontrando lo stesso problema. Forse aggiungere un Thread.Sleep (100) qui e là dovrebbe aiutare? La compilazione di un grafico richiede un po 'di tempo per aggiornare le immagini grafiche ecc. Quindi potrebbe essere necessario attendere prima di aggiungere altri dati. – CodingBarfield