C# 超时工具类 第二版
附源码,没有附测试demo
之前的工具类:C# 给某个方法设定执行超时时间
/// <summary>
/// 超时工具
/// </summary>
public class TimeoutTools : IDisposable
{
private System.Windows.Forms.Timer timer; /// <summary>
/// 位置
/// </summary>
public uint Position { get; private set; } /// <summary>
/// 超时事件
/// </summary>
public event EventHandler TimeoutEvent; /// <summary>
/// Tick事件
/// </summary>
public event EventHandler TickEvent; /// <summary>
/// 步长值
/// <para>默认值1</para>
/// </summary>
public uint StepLength { get; set; } /// <summary>
/// 超时长度
/// <para>默认180</para>
/// </summary>
public uint TimeoutLength { get; set; } /// <summary>
/// 默认构造函数
/// </summary>
public TimeoutTools(System.ComponentModel.IContainer container)
{
this.StepLength = ;
this.TimeoutLength = ; this.timer = new System.Windows.Forms.Timer(container);
this.timer.Interval = ;
this.timer.Enabled = false; timer.Tick += (sender, e) =>
{
this.Position += this.StepLength; if (this.Position >= this.TimeoutLength)
{
this.Reset(); this.OnTimeOut();
}
else
{
if (this.TickEvent != null)
{
this.TickEvent(this, EventArgs.Empty);
}
}
};
} ///<summary>
/// 指定超时时间 执行某个方法
///</summary>
///<returns>执行 是否超时</returns>
public static bool DoAction(TimeSpan timeSpan, Action action)
{
if (action == null)
throw new ArgumentNullException("action is null"); bool timeout = true; try
{
// 异步调用Action
IAsyncResult result = action.BeginInvoke(null, null); // Wait
if (result.AsyncWaitHandle.WaitOne(timeSpan, false))
{
timeout = false;
} if (!timeout)
{
action.EndInvoke(result);
}
}
catch (Exception)
{
timeout = true;
} return timeout;
} /// <summary>
/// 设置计时器参数
/// </summary>
/// <param name="period">毫秒</param>
public void SetInterval(int period)
{
if (period == Timeout.Infinite)
{
this.timer.Enabled = false;
return;
}
this.timer.Interval = period;
this.timer.Enabled = true;
} /// <summary>
/// 接收到信号
/// </summary>
public void Reset()
{
this.Position = ;
} protected void OnTimeOut()
{
if (this.TimeoutEvent != null)
{
this.TimeoutEvent(this, EventArgs.Empty);
}
} public void Dispose()
{
if (this.timer == null)
return; this.timer.Enabled = false;
this.timer.Dispose();
}
}
C# 超时工具类 第二版的更多相关文章
- briup_jdbc自建工具类终极版
总结:此次构建工具类,难点在于查询,所需要的功能是 不管是 oracle还是mysql 都可以连接,并且 提供所需要的实体类,都可以将查询内容封装到实体类中去 遇到的难点 连接时,是从prppert ...
- 二维码生成工具类java版
注意:这里我不提供所需jar包的路径,我会把所有引用的jar包显示出来,大家自行Google package com.net.util; import java.awt.BasicStroke; im ...
- redis集群使用Java工具类(Java jedis集群工具类)
package com.xiaomi.weather.vote.webservices.util.redisCache; import com.google.common.base.Strings; ...
- java代码之美(12)---CollectionUtils工具类
java代码之美(12)---CollectionUtils工具类 这篇讲的CollectionUtils工具类是在apache下的, 而不是springframework下的CollectionUt ...
- java代码(12) ---CollectionUtils工具类
CollectionUtils工具类 CollectionUtils工具类是在apache下的,而不是springframework下的CollectionUtils 个人觉得在真实项目中Collec ...
- MySQL数据库工具类之——DataTable批量加入MySQL数据库(Net版)
MySQL数据库工具类之——DataTable批量加入数据库(Net版),MySqlDbHelper通用类希望能对大家有用,代码如下: using MySql.Data.MySqlClient; us ...
- Lucene第二篇【抽取工具类、索引库优化、分词器、高亮、摘要、排序、多条件搜索】
对Lucene代码优化 我们再次看回我们上一篇快速入门写过的代码,我来截取一些有代表性的: 以下代码在把数据填充到索引库,和从索引库查询数据的时候,都出现了.是重复代码! Directory dire ...
- 《python基础教程(第二版)》学习笔记 类和对象(第7章)
<python基础教程(第二版)>学习笔记 类和对象(第7章) 定义类class Person: def setName(self,name): self.name=n ...
- java邮件工具类【最终版】
http://www.xdemo.org/java-mail/ 对比链接中,添加了抄送和暗抄送功能(已解决,如图代码:抄送不能多个用户,会报错,未解之谜) sendHtmlmail方法可以发送附件以及 ...
随机推荐
- ABP理论学习之领域服务
返回总目录 本篇目录 介绍 IDomainService接口和DomainService类 样例 创建一个接口 服务实现 调用应用服务 一些讨论 何不只使用应用服务 如何强制使用领域服务 介绍 领域服 ...
- Android知识杂记(四)
1.完整退出activity的设计思路 1.1 封装一个基础activity类 public abstract class RootActivity extends FragmentActivity{ ...
- JavaScript实现TwoQueues缓存模型
本文所指TwoQueues缓存模型,是说数据在内存中的缓存模型. 无论何种语言,都可能需要把一部分数据放在内存中,避免重复运算.读取.最常见的场景就是JQuery选择器,有些Dom元素的选取是非常耗时 ...
- OData的初步认识
What – OData是什么? OData - Open Data Protocal,是一个设计和使用RESTful API的标准.REST本身只是一个构建web服务的思想和理念,其没有规定一个统一 ...
- 解决OracleConnection ORA-1017 和 HRESULT:0x8007000B 错误
试图加载格式不正确的程序. (异常来自HRESULT:0x8007000B) 解决方案: IIS下 winform下: ORA-1017 错误
- Sql Server系列:自定义函数
用户自定义函数可以像系统函数一样在查询或存储过程中调用,可以接受参数.执行操作并将操作结果以值的形式返回.返回值可以是单个标量或结果集. 1. 标量函数 标量函数返回一个确定类型的标量值,对于多语句的 ...
- android的logcat详细用法
Android日志系统提供了记录和查看系统调试信息的功能.日志都是从各种软件和一些系统的缓冲区中记录下来的,缓冲区可以通过 logcat 命 令来查看和使用. 使用logcat命令 你可以用 logc ...
- [转]PHP的执行流程,PHP扩展加载过程
原文:http://www.imsiren.com/archives/535 为了以后能开发PHP扩展..就一定要了解PHP的执行顺序..这篇文章就是为C开发PHP扩展做铺垫. web环境 我们假设为 ...
- 深入学习jQuery选择器系列第二篇——过滤选择器之子元素选择器
× 目录 [1]通用形式 [2]反向形式 [3]首尾元素 [4]唯一元素 前面的话 在上一篇中已经介绍过基础选择器和层级选择器,本文开始介绍过滤选择器.过滤选择器是jQuery选择器中最为庞大也是最为 ...
- Android图片处理
相信做Android开发的小伙伴对于Android图片压缩.裁剪一定有很深的印象,今天我将带领大家一起学习一下这个看着高深莫测的知识,以便再以后的学习.工作中可以帮助到大家. 首先我们看一下这个问题出 ...