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);
            }
        }