跳至主要内容

IntervalSetter

重要 注意 提醒

Coding Style wiki


IntervalSetterIntervalTimer靜態管理器,統一建立與管理間隔觸發計時器,支持 int id / string id / 匿名 handle 三種鍵值管理方式,並提供 TryClearIntervalClearAllIntervalTimers 統一清理 API。

命名空間OxGKit.TimeSystem
類型public static class IntervalSetter
原始碼IntervalSetter.cs
using OxGKit.TimeSystem;

快速上手

using OxGKit.TimeSystem;

// 以 int id 建立,每 1000 毫秒觸發一次
IntervalSetter.SetInterval(1001, () => { /* ... */ }, 1000);

// 以 string id 建立
IntervalSetter.SetInterval("poll", () => { /* ... */ }, 1000);

// 匿名建立,返回 IntervalTimer handle
IntervalTimer handle = IntervalSetter.SetInterval(() => { /* ... */ }, 1000);

// 檢查運轉狀態 (int id)
bool isRunning = IntervalSetter.CheckIsRunning(1001);

// 依鍵值清除
IntervalSetter.TryClearInterval(1001);
IntervalSetter.TryClearInterval("poll");
IntervalSetter.TryClearInterval(handle);

// 清除全部
IntervalSetter.ClearAllIntervalTimers();

通用規則

  • 相同 id 已存在時,再次 SetInterval 直接忽略 (不會建立新計時器,也不會擲出例外);需先 TryClearInterval 該 id 才能重新建立。
  • 管理容量上限為 32768 (1 << 15),超過時擲出 InvalidOperationException
  • ignoreTimeScale 與執行緒行為與 IntervalTimer 相同。

注意 CheckIsRunning 僅提供 int id 版本;string id 與匿名 handle 可直接透過 IntervalTimer.IsRunning() 檢查。

重要 擁有者 (功能/場景) 結束時務必呼叫 TryClearIntervalClearAllIntervalTimers 清理,否則計時器會持續運轉並佔用管理容量。


方法

方法總覽

方法說明
SetInterval建立並啟動間隔觸發 (int id / string id / 匿名 handle)。
SetIntervalOnThread建立並啟動間隔觸發 (切換至執行緒池運轉)。
CheckIsRunning檢查指定 int id 的計時器是否運轉中。
TryClearInterval停止並移除指定的計時器。
ClearAllIntervalTimers停止並清除所有計時器。

SetInterval

public static void SetInterval(int id, Action action, int milliseconds, bool ignoreTimeScale = false)

public static void SetInterval(string id, Action action, int milliseconds, bool ignoreTimeScale = false)

public static IntervalTimer SetInterval(Action action, int milliseconds, bool ignoreTimeScale = false)

建立 IntervalTimer 並啟動間隔觸發,每隔 milliseconds 毫秒觸發一次 action

  • int id / string id 版本:以指定鍵值管理,相同 id 已存在時直接忽略。
  • 匿名版本:以計時器的 HashCode 作為鍵值,返回 IntervalTimer handle,後續以 handle 進行清除。
// 以 string id 管理,每秒輪詢一次
IntervalSetter.SetInterval("poll", () => Poll(), 1000);

SetIntervalOnThread

public static void SetIntervalOnThread(int id, Action action, int milliseconds, bool ignoreTimeScale = false)

public static void SetIntervalOnThread(string id, Action action, int milliseconds, bool ignoreTimeScale = false)

public static IntervalTimer SetIntervalOnThread(Action action, int milliseconds, bool ignoreTimeScale = false)

SetInterval,但迴圈會先切換至執行緒池 (UniTask.SwitchToThreadPool) 運轉。

重要 回調可能於非 Unity 主執行緒執行,請勿直接存取 UnityEngine 物件 (需自行封送回主執行緒);WebGL 平台不支持多執行緒,於 WebGL 上行為等同 SetInterval

CheckIsRunning

public static bool CheckIsRunning(int id)

檢查指定 int id 的計時器是否正在運轉中,id 不存在時返回 false。

TryClearInterval

public static bool TryClearInterval(int id)

public static bool TryClearInterval(string id)

public static bool TryClearInterval(IntervalTimer intervalTimer)

停止並移除指定的計時器,成功返回 true:

  • int id / string id 版本:依鍵值查找,不存在時返回 false。
  • handle 版本:依 handle 的 HashCode 查找並移除;即使不在管理清單中,仍會對該 handle 執行 StopInterval() 並返回 true (handle 為 null 時返回 false)。
IntervalSetter.TryClearInterval("poll");

ClearAllIntervalTimers

public static void ClearAllIntervalTimers()

停止並清除所有IntervalSetter 管理的計時器。