#if NETFX_CORE using UnityEngine; using System; using System.Threading.Tasks; namespace uOSC.Uwp { public class Thread : uOSC.Thread { Task task_; bool isRunning_ = false; Action loopFunc_ = null; public override void Start(Action loopFunc) { if (isRunning_ || loopFunc == null) return; isRunning_ = true; loopFunc_ = loopFunc; task_ = new Task(ThreadLoop); task_.Start(); } async void ThreadLoop() { while (isRunning_) { try { loopFunc_(); await Task.Delay(IntervalMillisec); } catch (Exception e) { Debug.LogError(e.Message); Debug.LogError(e.StackTrace); } } } public override void Stop(int timeoutMilliseconds = 3000) { if (!isRunning_) return; isRunning_ = false; if (!task_.IsCompleted) { task_.Wait(timeoutMilliseconds); } } } } #endif