예제 #1
0
        private async Task VisitEndEvent(TEndEvent element)
        {
            foreach (var eventDefinition in element.EventDefinition)
            {
                switch (eventDefinition)
                {
                case TTerminateEventDefinition terminateEvent:
                    await VisitTerminateEvent(element, terminateEvent);

                    return;
                }
            }

            _logger.LogWarning("End");
        }
예제 #2
0
        public static LoadResult LoadAPI(out Exception error)
        {
            lock (_Lock) {
                if (_LoadResult == LoadResult.NotLoaded)
                {
                    _LoadException = null;
                    var libPath = System.IO.Path.Combine(
                        Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles, Environment.SpecialFolderOption.DoNotVerify),
                        "Superluminal", "Performance", "API", "DLL",
                        Environment.Is64BitProcess ? "x64" : "x86",
                        "PerformanceAPI.dll"
                        );
                    var hDll = LoadLibrary(libPath);
                    if (hDll != IntPtr.Zero)
                    {
                        try {
                            var getResult = PerformanceAPI_GetAPI(PERFORMANCEAPI_VERSION, out APIPointers);
                            _SetCurrentThreadName = Marshal.GetDelegateForFunctionPointer <TSetCurrentThreadName>(APIPointers.pSetCurrentThreadName);
                            _BeginEventWide       = Marshal.GetDelegateForFunctionPointer <TBeginEventWide>(APIPointers.pBeginEventWide);
                            _EndEvent             = Marshal.GetDelegateForFunctionPointer <TEndEvent>(APIPointers.pEndEvent);
                            _LoadResult           = (getResult != 0) ? LoadResult.OK : LoadResult.InvalidVersion;
                        } catch (Exception exc) {
                            _LoadResult    = LoadResult.UncaughtException;
                            _LoadException = exc;
                        }
                    }
                    else
                    {
                        _LoadResult = LoadResult.DllNotFound;
                    }

                    if (_LoadResult != LoadResult.OK)
                    {
                        Console.WriteLine($"Superluminal load result: {_LoadResult} error: {_LoadException}");
                    }
                    Enabled = _LoadResult == LoadResult.OK;
                }

                error = _LoadException;
                return(_LoadResult);
            }
        }
예제 #3
0
 private async Task VisitTerminateEvent(TEndEvent endEvent, TTerminateEventDefinition terminateEvent)
 {
     _logger.LogWarning("Terminate");
     _terminateTaskCompletionSource.TrySetResult(default(object));
     await VisitFlowNodes(GetParallelOutgoingNodes(endEvent));
 }