Alles rund um die API in EPLAN
BackgroundWorker in der EPLAN API
… geht offiziell nicht. Steht auch so in der Dokumentation. Darum hier gleich der Vermerk: Es handelt sich um eine interne Funktionalität welche nicht supported wird.
Dennoch hat es genau mein Problem gelöst:
Ich habe eine ProgressBar welche über einen BackgroundWorker viel Arbeit macht. An paar Stellen brauche ich die EPLAN API. Hier hatte ich aber komisches Verhalten (DLLs wurden nicht gefunden, usw.).
Zurückzuführen war es darauf dass der EPLAN Thread nicht wusste wo er suchen soll.
Mit EplanMainThreadDispatcher gibt es die Möglichkeit Code im Dispatcher und somit im Thread von EPLAN auszuführen. Hier ein Beispiel:
new EplanMainThreadDispatcher().ExecuteInMainThreadSync(o => { new CommandLineInterpreter().Execute("reports /TYPE:PROJECT"); return null; }, null);
Hab mir das mal bisl vereinfacht mit einer Helper-Klasse:
using Eplan.EplApi.Base.Internal; using Action = System.Action; namespace Suplanus.Sepla.Application { public class EplanDispatcher { public static void ExecuteInMainThread(Action action) { new EplanMainThreadDispatcher().ExecuteInMainThreadSync(o => { action.Invoke(); return null; }, null); } } }
Dann brauch ich nur noch:
EplanDispatcher.ExecuteInMainThread(() => { new CommandLineInterpreter().Execute("reports /TYPE:PROJECT"); } );