This is a functional listener provider library. You can instantiate a listener and listen a function.git
這是一個函數式的監聽器類庫。能夠經過實例化一個監聽器用於監聽一個函數體。github
GitHub:https://github.com/mykge/TListenerapi
public class Program { public static void Main(string[] args) { var lastDate = DateTime.Now; var listener = new TListener.Listener<string>() .Listen(x => /*匿名參數是一個ListenerContext對象*/ { return true; /*監聽器將循環執行此函數,直到函數體返回true,則跳轉至Success中的函數體*/ }) .Success(x => { x.SyncContext /*SyncContext能夠用於向主線程發送函數體*/ .Post(s => { Console.WriteLine(DateTime.Now.ToString()); /*Post中的操做會切換到主線程執行*/ }, null); }) .Log(x => Console.WriteLine("Log - Times : " + x.Counter.Count().ToString())) /*監聽函數體每次執行都將在函數最後執行Log函數體*/ .Exit(x => Console.WriteLine("Exit"))/*當監聽器結束監聽時,運行此函數體*/ .Interval(5000)/*監聽器執行監聽函數體的間隔*/ .Times(5, x => Console.WriteLine("Times Out"))/*監聽器Success函數得次數,並在次數達到後執行函數體*/ .Build();/*構建監聽器,在開始監聽前必須先構建監聽器*/ listener.Start();/*開始監聽*/ Console.ReadKey(); } }
IListener<TModel> Listen(Func<ListenerContext<TModel>, bool> _handler)
設置監聽操做,當函數返回true則執行Success,若是拋出異常則執行Error.ide
參數函數
_handler :監聽函數體ui
IListener<TModel> Success(Action<ListenerContext<TModel>> _handler)
當監聽函數返回true時,執行此函數體.spa
參數線程
_handler :函數體日誌
IListener<TModel> Error(Action<ListenerContext<TModel>, Exception> _handler)
當監聽函數拋出異常時,執行此函數體.code
參數
_handler :異常處理函數體
IListener<TModel> Log(Action<ListenerContext<TModel>> _handler)
每當執行監聽函數後,執行此函數.
參數
_handler :日誌函數體
IListener<TModel> Interval(int _interval)
當執行監聽函數後,線程將掛起一段時間.
參數
_interval :線程掛起的時間
IListener<TModel> Times(int times, Action<ListenerContext<TModel>>? _handler);
設置一個值,指示Success函數執行的最大次數.
參數
times :Success函數執行的最大次數.
?_handler :當Success函數執行次數達到最大次數時,執行此函數.
IListener<TModel> Exit(Action<ListenerContext<TModel>> _handler)
當監聽器退出時,執行此函數體.
參數
_handler :函數體
IListener<TModel> Build()
構建監聽器,必須先構建監聽器才能啓動.
void Start()
啓動監聽器.
void Stop()
中止監聽器.
SynchronizationContext SyncContext
提供線程通訊的能力。詳情能夠參照MSDN : SynchronizationContext Class
bool IsRunning
獲取或設置監聽器的運行狀態, RequestStop函數實際就是修改這個屬性的值.
Hashtable TempData
這個哈希表能夠在一次監聽過程當中的不一樣函數體間傳遞數據,其生命週期會在下一次執行監聽函數前被重置.
Thread WorkThread
負責執行整個監聽過程的工做線程.
ICounter Counter
計數器.
TModel ListenerContext<TModel>.Model
此屬性只在ListenerContext的泛型類中存在,用於表示TModel的實例對象.
void RequestStop()
修改 IsRunning 的值爲 false, 並等待工做線程退出.