TListener
This is a functional listener provider library. You can instantiate a listener and listen a function.
这是一个函数式的监听器类库。可以通过实例化一个监听器用于监听一个函数体。
GitHub:https://github.com/mykge/TListener
Sample 例子
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(); } }
Api Document
IListener
Methods
Listen
IListener<TModel> Listen(Func<ListenerContext<TModel>, bool> _handler)
设置监听操作,当函数返回true则执行Success,如果抛出异常则执行Error.
参数
_handler :监听函数体
Success
IListener<TModel> Success(Action<ListenerContext<TModel>> _handler)
当监听函数返回true时,执行此函数体.
参数
_handler :函数体
Error
IListener<TModel> Error(Action<ListenerContext<TModel>, Exception> _handler)
当监听函数抛出异常时,执行此函数体.
参数
_handler :异常处理函数体
Log
IListener<TModel> Log(Action<ListenerContext<TModel>> _handler)
每当执行监听函数后,执行此函数.
参数
_handler :日志函数体
Interval
IListener<TModel> Interval(int _interval)
当执行监听函数后,线程将挂起一段时间.
参数
_interval :线程挂起的时间
Times
IListener<TModel> Times(int times, Action<ListenerContext<TModel>>? _handler);
设置一个值,指示Success函数执行的最大次数.
参数
times :Success函数执行的最大次数.
?_handler :当Success函数执行次数达到最大次数时,执行此函数.
Exit
IListener<TModel> Exit(Action<ListenerContext<TModel>> _handler)
当监听器退出时,执行此函数体.
参数
_handler :函数体
Build
IListener<TModel> Build()
构建监听器,必须先构建监听器才能启动.
Start
void Start()
启动监听器.
Stop
void Stop()
停止监听器.
ListenerContext 监听器上下文类
Properties 属性
SyncContext
SynchronizationContext SyncContext
提供线程通信的能力。详情可以参照MSDN : SynchronizationContext Class
IsRunning
bool IsRunning
获取或设置监听器的运行状态, RequestStop函数实际就是修改这个属性的值.
TempData
Hashtable TempData
这个哈希表可以在一次监听过程中的不同函数体间传递数据,其生命周期会在下一次执行监听函数前被重置.
WorkThread
Thread WorkThread
负责执行整个监听过程的工作线程.
Counter
ICounter Counter
计数器.
ListenerContext<>.Model
TModel ListenerContext<TModel>.Model
此属性只在ListenerContext的泛型类中存在,用于表示TModel的实例对象.
Methods 方法
RequestStop
void RequestStop()
修改 IsRunning 的值为 false, 并等待工作线程退出.