private void invokeListener(TestListenerDescriptor testListenerDescriptor, string method, params object[] parameters) { TestListener testListenerInstance = null; var testScriptObject = parameters[0] is TestScriptObject ? (TestScriptObject)parameters[0] : null; lock (getInstanceLock) { testListenerInstance = getListenerInstance(testListenerDescriptor); } testListenerInstance.VirtualUser = VirtualUser; Type type = testListenerInstance.GetType(); MethodInfo methodInfo = type.GetMethod(method); // If method does not have the NoOperation attribute applied, continue if (isOperable(methodInfo)) { if (testScriptObject is null) { logEvent.Info($"Invoking listener \"{testListenerDescriptor.Name}\" event handler \"{method}\" ({VirtualUser})"); } else { logEvent.Info( $"Invoking listener \"{testListenerDescriptor.Name}\" event handler \"{method}\": \"{testScriptObject.Title}\" ({VirtualUser})"); } methodInfo.Invoke(testListenerInstance, parameters); } }