- C# API: server - keep references to internal control handler delegates to avoid garbage collection
This commit is contained in:
parent
15ec6c7a7c
commit
b931b773eb
1 changed files with 15 additions and 4 deletions
|
@ -659,7 +659,9 @@ namespace IEC61850
|
|||
|
||||
private IntPtr self = IntPtr.Zero;
|
||||
|
||||
|
||||
private InternalControlHandler internalControlHandlerRef = null;
|
||||
private InternalControlPerformCheckHandler internalControlPerformCheckHandlerRef = null;
|
||||
private InternalControlWaitForExecutionHandler internalControlWaitForExecutionHandlerRef = null;
|
||||
|
||||
private class ControlHandlerInfo {
|
||||
public DataObject controlObject = null;
|
||||
|
@ -884,7 +886,10 @@ namespace IEC61850
|
|||
info.controlHandler = handler;
|
||||
info.controlHandlerParameter = parameter;
|
||||
|
||||
IedServer_setControlHandler(self, controlObject.self, internalControlHandler, GCHandle.ToIntPtr(info.handle));
|
||||
if (internalControlHandlerRef == null)
|
||||
internalControlHandlerRef = new InternalControlHandler (internalControlHandler);
|
||||
|
||||
IedServer_setControlHandler(self, controlObject.self, internalControlHandlerRef, GCHandle.ToIntPtr(info.handle));
|
||||
}
|
||||
|
||||
public void SetCheckHandler (DataObject controlObject, CheckHandler handler, object parameter)
|
||||
|
@ -894,7 +899,10 @@ namespace IEC61850
|
|||
info.checkHandler = handler;
|
||||
info.checkHandlerParameter = parameter;
|
||||
|
||||
IedServer_setPerformCheckHandler(self, controlObject.self, internalCheckHandler, GCHandle.ToIntPtr(info.handle));
|
||||
if (internalControlPerformCheckHandlerRef == null)
|
||||
internalControlPerformCheckHandlerRef = new InternalControlPerformCheckHandler (internalCheckHandler);
|
||||
|
||||
IedServer_setPerformCheckHandler(self, controlObject.self, internalControlPerformCheckHandlerRef, GCHandle.ToIntPtr(info.handle));
|
||||
}
|
||||
|
||||
public void SetWaitForExecutionHandler (DataObject controlObject, ControlWaitForExecutionHandler handler, object parameter)
|
||||
|
@ -904,7 +912,10 @@ namespace IEC61850
|
|||
info.waitForExecHandler = handler;
|
||||
info.waitForExecHandlerParameter = parameter;
|
||||
|
||||
IedServer_setWaitForExecutionHandler(self, controlObject.self, internalControlWaitForExecutionHandler, GCHandle.ToIntPtr(info.handle));
|
||||
if (internalControlWaitForExecutionHandlerRef == null)
|
||||
internalControlWaitForExecutionHandlerRef = new InternalControlWaitForExecutionHandler (internalControlWaitForExecutionHandler);
|
||||
|
||||
IedServer_setWaitForExecutionHandler(self, controlObject.self, internalControlWaitForExecutionHandlerRef, GCHandle.ToIntPtr(info.handle));
|
||||
}
|
||||
|
||||
public void HandleWriteAccess (DataAttribute dataAttr, WriteAccessHandler handler, object parameter)
|
||||
|
|
Loading…
Add table
Reference in a new issue