Die ganze Idee der Schaffung eines separaten Thread, um einen Prozess
durchzuführen ist eine anerkannte Technik, um mit Multi-Prozesse zu einem bestimmten Zeitpunkt separate Anwendungs-Thread
zu schaffen, auf die die Benutzeranwendung zugreift.
Bei Dynamics AX, ist es manchmal nicht so einfach, zu erkennen wo und warum Sie
das Themen Multi-Threading verwenden
sollten, um einen bestimmten Prozess
oder Entwicklungsziel zu
erreichen.
In meinem Fall war es, dass ein Prozess des Main Thread. Das weiterarbeitet
der Nutzer verzögert, bis der Prozess beendet wurde. Es lag nun nahe diese länger
in einen eigenen Thread laufen zu lassen.
Das folgende Beispiel soll zeigen wie man einen Dynamics AX Prozess
in einen eigenen Thread ausführen kann. Hierbei war mir eine Rückmeldung der
Prozesse nicht wichtig.
Für dieses Beispiel habe ich einen Job erstellt der einen
entsprechenden Prozess einer Klasse Kapselt.
static void
ThreadJob(Args _args)
{
Thread t;
ExecutePermission perm;
container con;
;
perm = new ExecutePermission();
perm.assert();
… // create
new thread
t = new Thread();
//set parameter values
con = conins(con,1,’param1’);
con = conins(con,2,’param2’);
t.setInputParm(con);
// run thread
t.run(classnum(LongProcess),
staticMethodstr(LongProcess, ThreadExecute));
}
Die Methode “ThreadExecute” der Klasse “LongProcess” beinhält
den eigentlichen Source des Prozess.
server
static void ThreadExecute(Thread T)
{
container ThParams = T.getInputParm();
Set permissionSet;
str param1;
int
param2;
;
permissionSet = new Set(Types::Class);
permissionSet.add(new
InteropPermission(InteropKind::ClrInterop));
CodeAccessPermission::assertMultiple(permissionSet);
//get parameter values
param1= conpeek(ThParams, 1);
param2= conpeek(ThParams, 2);
// run long
term process
// ………
CodeAccessPermission::revertAssert();
}