/// <summary> /// 在后台制造延迟,不阻塞主线程,延迟后执行指定内容 /// </summary> /// <param name="延迟毫秒数">延迟时间</param> /// <param name="执行内容">执行方法体,传递的参数即是调用延迟执行方法的对象</param> public static void 延迟执行(this Control o, int 延迟毫秒数, Action <Control> 执行内容) { 定时器 d = new 定时器(延迟毫秒数); d.执行完毕事件 += new 定时器.执行完毕代理((s, op, b) => 执行内容(o)); d.执行(null); }
/// <summary> /// 跳转网页,等待网页加载完毕后执行相应指令,如果超时则重新启动跳转行为并重新计时。 /// 如果跳转网址设为空,则是在等待页面重加载后执行相应操作,通常用于点击按钮后等待页面切换后执行命令时使用。 /// </summary> /// <param name="跳转网址">要跳转的网址</param> /// <param name="超时秒数">超时时间设定</param> /// <param name="超时代理">超时后执行的特别操作,比如再次点击按钮以重新发起页面跳转操作,可设为空</param> /// <param name="执行代理">跳转后执行的代码</param> public static void 跳转后执行(this WebBrowser wb, string 跳转网址, int 超时秒数, WebBrowser跳转超时执行代理 超时代理, WebBrowser跳转后执行代理 执行代理) { 定时器 d = new 定时器(超时秒数 * 1000, 500); d.执行完毕事件 += new 定时器.执行完毕代理((s, o, b) => { if (b) { return; } if (超时代理 != null) { 超时代理(wb); } wb.Navigate("about:blank"); wb.延迟执行(5000, t => wb.跳转后执行(跳转网址, 超时秒数, 超时代理, 执行代理)); }); wb.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler(wb_DocumentCompleted); wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wb_DocumentCompleted); d.执行(null); wb.存入缓存("定时器", d); wb.存入缓存("执行代理", 执行代理); if (!跳转网址.IsNullOrEmpty()) { wb.Navigate(跳转网址); } }
static void test_定时器() { 定时器 T = new 定时器(1000); T.运行内容 = () => { Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); i++; }; T.停止条件 = () => { return(i >= 5); }; T.启动(); }