Help / WLanguage / WLanguage functions / Communication / .Net functions
  • Vocabulary
  • How to use a.Net delegate with WINDEV?
  • How to process the .NET events
  • Tip
  • Miscellaneous
WindowsLinuxUniversal Windows 10 AppJavaReports and QueriesUser code (UMC)
WindowsLinuxPHPWEBDEV - Browser code
AndroidAndroid Widget iPhone/iPadIOS WidgetApple WatchMac CatalystUniversal Windows 10 App
Stored procedures
DotNetDelegate (Function)
In french: DotNetDélégué
Initializes a .NET delegate. This delegate will allow .NET to call back a WLanguage procedure or method in case of events or "callbacks".
clOwn is OwnEvent
clOwn:add_MyEvent(DotNetDelegate("MyHandler", "EventHandler<MyEventArgument>"))
PROCÉDURE MyHandler(src, args)
<Result> = DotNetDelegate(<WLanguage procedure> , <Type of Delegate>)
<Result>: .NET object
.Net object of the delegate type.
<WLanguage procedure>: Procedure name
Name of the WLanguage procedure or method to call. This procedure has the following format:

PROCEDURE <Procedure Name>(Src, Args)
  • Src corresponds to the .NET object that sends the event
  • Args corresponds to the .NET object used as parameter of the event.
<Type of Delegate>: Character string
Name of the class of the delegate to create. This parameter must not correspond to a variable.


  • Delegate: Used to manage a callback. It is a "function" type. It defines the prototype of the function. The delegate is initialized with a .NET function corresponding to the prototype. The delegate is the .NET equivalent of the function pointer in C. Several methods can be associated to the same delegate: all of them will be called.
    Caution: in the.NET documentation, this term can also designate the "delegates methods", which means the methods associated with a delegate.
  • Handler: Particular type of delegate specifically designed for processing events.
  • Event: An event can be associated with one or more handlers. When the event is triggered, all the handlers associated with this event are called.

How to use a.Net delegate with WINDEV?

To use a .Net delegate with, you must:
  1. Find the deleguate in the list of .NET classes
    The delegate is a .NET class itself. The name of the delegate must be known (see the documentation of your.NET assembly).
  2. Define the parameters of the delegate
    The delegate defines an Invoke method. The WLanguage procedure associated with the delegate must have the same parameters.
  3. Associate the WLanguage procedure with the delegate
    The delegate is used in a .NET class. This class owns methods used to add or remove a "delegate method" to/from the delegate.
    See the documentation about your .NET assembly to find out the names of these methods.
  • Name of the class that uses the delegate : CUseDelegate
  • Name of the class of the delegate: CUseDelegate.CpfMyDelegate
  • Prototype of the Invoke method of the CUseDelegate.CpfMyDelegate class : Invoke(integer)
  • Prototype of the corresponding WLanguage method: Procedure MyCallbackWL(local i is int)
    // Instantiate a class that owns a delegate
    clUse is CUseDelegate
    // Add a "delegate method" (WL callback) to the delegate
    clUse:AddDelegate(DotNetDelegate("MyWLCallback", "CUseDelegate.CpfMyDelegate"))
    // Provoke the use of the delegate by the .NET class

How to process the .NET events

To process the .Net events, you must:
1. Find the event.
The event is a member of a .NET class. This member has a name and a type. The type defines the type of the handler that can be associated with the event. The name is used to find two methods:
  • "add_<Event name>"
  • "remove_<Event name>"
These two methods are used to associate and dissociate one or more handlers with/from an event. The type of the parameter for these two methods is the name of the handler type.
Example: The OwnEvent class contains a MyEvent event whose type is EventHandler<MyEventArgument>.
2. Retrieve a handler.
A handler can be retrieved with DotNetDelegate:
  • The first parameter is the name of the WLanguage procedure
  • The second parameter is the name of the class of the handler type. This name can be retrieved by the name of the type of parameters of "add_xxx" and "remove_xxx" methods.
Example: The WLanguage procedure has the following format:
PROCÉDURE MyHandler(src, args)
src is a .NET object of OwnEvent type, args is a .NET object of MyEventArgument type
3. Associate the handler with the event
To associate the handler with the event, all you have to do is call the "add_<Event Name> method on the object that owns the event".
clOwn:add_MyEvent(DotNetDelegate("MyHandler", "EventHandler<MyEventArgument>"))
4. Trigger the event
In our example, the call to clOwn:Trigger triggers the event.


In the WLanguage procedure, you can:
  • use the methods associated with the parameters of the procedure. However, the completion is not available.
  • define a dynamic object and assign the requested parameter to it. The completion is available for the object.
These two methods are used in the detailed example.


  • This function cannot be used in dynamic compilation.
  • The WLanguage procedure is executed in a secondary thread. At each call, the HFSQL mode used is a light copy of the HFSQL context. The context is destroyed once the procedure has been executed.
Related Examples:
WD DirectoryObserver Training (WINDEV): WD DirectoryObserver
[ + ] This example presents the use of the WLanguage function named fTrackDirectory.
It is used to watch a directory,
which means to be informed whenever a modification is performed in this directory.
A modification can be:
- Adding a file or a directory
- Renaming
- Modifying a file
- Deleting a file
WD DOTNET Delegate Training (WINDEV): WD DOTNET Delegate
[ + ] This educational example explains how to interact with the DOTNET delegates
Component: wd280vm.dll
See also
Minimum version required
  • Version 12
This page is also available for…
Click [Add] to post a comment

Last update: 06/22/2023

Send a report | Local help