Why Is My VI Broken When Using Start Asynchronous Call on a Dynamic Dispatch VI

Updated Aug 6, 2019

Reported In

Software

  • LabVIEW

Other

  • LabVIEW OOP

Issue Details

I'm trying to call a dynamic dispatch VI from Start Asynchronous Call . My VI is not executable, though the same code works with a VI that is not a dynamic dispatch VI.

Solution

The Start Asynchronous Call node does not support dynamic dispatch VIs. It is not possible to call a dynamic dispatch VI this way.

To work around this issue, it is possible to create a static dispatch VI in the parent class, that acts as a wrapper. Static dispatch VIs can be called asynchronously and inside the static dispatch  VI the dynamic dispatching will still work.

See the attached project for an example.

Additional Information

When passing the class wire into the static dispatch VI, LabVIEW will create a datacopy which may result in bad performance for data-heavy objects.

The usecase in the workaround is very limited. A Call-and-Forget only makes sense, if the object is not needed anymore after the asynchronous VI.