public static void ClearProgressBar() { if (UnityThread.allowsAPI) { EditorUtility.ClearProgressBar(); } BackgroundProgress.Clear(); }
public static void DisplayProgressBar(string title, string info, float progress) { if (UnityThread.allowsAPI) { EditorUtility.DisplayProgressBar(title, info, progress); } else { BackgroundProgress.Report(title, progress); } }
private static void Work() { while (true) { Action task = null; var remaining = 0; lock (queue) { if (queue.Count > 0) { remaining = queue.Count; task = queue.Dequeue(); } } if (task != null) { BackgroundProgress.Report($"{remaining} task{(queue.Count > 1 ? "s" : "")} remaining...", 0); try { task(); } catch (Exception ex) { EditorApplication.delayCall += () => Debug.LogException(ex); } finally { BackgroundProgress.Clear(); } } else { Thread.Sleep(100); } } }
private void RunSynchronous(Task task) { threadTracker.Enter(); #if USE_PROGRESS_API // TODO: Improve TaskThreadTracker to track the actual task objects per thread, // which would allow us to use the progressItemId of the latest task on the current // thread as a parentId in Progress.Start. task.progressItemId = Progress.Start(task.title, task.currentStepLabel); EditorApplication.CallbackFunction reportDelegate = () => ReportTaskOnEditorUpdate(task); EditorApplication.update += reportDelegate; #else BackgroundProgress.Report(task.title, 0); #endif task.Begin(); #if USE_PROGRESS_API var status = Progress.Status.Running; #endif try { task.Run(); #if USE_PROGRESS_API status = Progress.Status.Succeeded; #endif } catch (ThreadAbortException) { #if USE_PROGRESS_API status = Progress.Status.Canceled; #endif } catch (OperationCanceledException) { #if USE_PROGRESS_API status = Progress.Status.Canceled; #endif } catch (TargetInvocationException tiex) when(tiex.InnerException is OperationCanceledException || tiex.InnerException is ThreadAbortException) { #if USE_PROGRESS_API status = Progress.Status.Canceled; #endif } catch { #if USE_PROGRESS_API status = Progress.Status.Failed; #endif throw; } finally { task.End(); #if USE_PROGRESS_API Progress.Finish(task.progressItemId, status); task.progressItemId = -1; EditorApplication.update -= reportDelegate; #else BackgroundProgress.Clear(); #endif threadTracker.Exit(); } }
public void Report(Task task) { #if !USE_PROGRESS_API BackgroundProgress.Report(task.currentStepLabel ?? task.title, task.ratio); #endif }