private void Work() { try { SubThreadChanger = ThreadChanger.GetSubThreadChanger(); while (true) { QueueTask task = null; lock (_locker) { if (_tasks.Count > 0) { task = _tasks.Dequeue(); if (task == null) // empty task = signal for stop { return; } } } if (task != null) { DoTask(task); } else { // Queue is empty, waiting for a new task _wh.WaitOne(); } } } catch (Exception ex) { Logger.Log(LogLevel.Warn, ex, "An abnormal exception occurs in a TaskQueue that has not been catched properly"); } }
public T InvokeInUIThread <T>(Func <T> func) => ThreadChanger.InvokeInUIThread(func);
public void PumpMessages(int timeoutMilliseconds, ILogger logger) => ThreadChanger.PumpMessages(timeoutMilliseconds, logger, LocalDispatcher);
public T InvokeInLocalThread <T>(Func <T> func) => ThreadChanger.InvokeInThread(func, LocalDispatcher);
public void InvokeInUIThread(Action action) => ThreadChanger.InvokeInUIThread(action);
public void InvokeInLocalThread(Action action) => ThreadChanger.InvokeInThread(action, LocalDispatcher);
public ISubThreadChanger GetSubThreadChanger() => ThreadChanger.GetSubThreadChanger();
public void EnqueueInUIThread(Action action) => ThreadChanger.EnqueueInUIThread(action);
public void EnqueueInLocalThread(Action action) => ThreadChanger.EnqueueInThread(action, LocalDispatcher);
public SubThreadChanger(ThreadChanger threadChanger) { ThreadChanger = threadChanger; }