This useful method allows you to turn any .NET Method you call into an asynchronously called method that returns a callback to you on completion rather than an immediate result.
Use this method to turn long running methods into async callbacks that return only when the method completes while your mainline code can continue to run. Great for offloading HTTP requests, and downloads while other code can continue to run.
Uses the AsyncCallbackEvents class to receive notifications when requests complete or fail (see example).
o.InvokeMethodAsync(loCallbackEvents, loInstance, lcMethod, lvParm1-10)
A callback events object that must have the following methods that fire when the respective events are fired:
- OnCompleted(lvResult, lcMethod)
- OnError(lcErrorMessage, loException, lcMethod)
The .NET object instance on which to call the specified method
The method to call.
lvParm1 - lvParm10
Up to 10 parameters that can be passed to the method.
Callback handlers are called back from a non-UI .NET thread and then marshalled back to the FoxPro UI thread. These callbacks can occur at any time after a program statement has executed on the FoxPro thread. This means the callback can interrupt a continuous block of currently executing code.
For this reason you should make sure to:
- Keep the callback handler code very short and fast
- Don't change state in the callback
- Restore the environment (aliases, settings etc)
- If necessary defer result processing by capturing
the result state and processing it later.
Firing off the async request:
loBridge = CreateObject("wwDotNetBridge","V4") loTests = loBridge.CreateInstance("Westwind.WebConnection.TypePassingTests") *** IMPORTANT: The callback object must remain in scope *** Either use a public var, or attach to an object that *** stays in scope for the duration of the callback PUBLIC loCallback loCallback = CREATEOBJECT("MyCallbacks") *** This methods returns immediately - then fire events when done loBridge.InvokeMethodAsync(loCallback,loTests,"HelloWorld","Rick") RETURN
Handling the Callback from the Async call:
*** Handle result values in this object *** The callback object is called back *** when the method completes or fails DEFINE CLASS MyCallback as AsyncCallbackEvents *** Returns the result of the method and the name of the method name FUNCTION OnCompleted(lvResult,lcMethod) ? "Success: " + lcMethod,lvResult ENDFUNC * Returns an error message, a .NET Exception and the method name FUNCTION OnError(lcMessage,loException,lcMethod) ? "Error: " + lcMethod,lcMessage ENDFUNC ENDDEFINE
See also:Class wwDotNetBridge | wwDotNetBridge::InvokeStaticMethodAsync | Class AsyncCallbackEvents
Comment or report problem with topic