在某些情况下
(
例如通过网络访问数据
)
,常常不希望程序卡住而占用太多时间
以至于造成界面假死。
在这时、我们可以通过
Thread
、
Thread + Invoke
(
UI
)或者是
delegate.BeginInvoke
来避免界面假死,
但是这样做时,某些代码或者是某个方法的执行超时的时间还是无法操控的。
那么我们又是否有一种比较通用的方法、来设定某一个方法的执行超时的时
间,让该其一旦超过指定时间则跳出指定方法、进而继续向下执行呢?
答案当然是肯定的。
delegate.BeginInvoke
可以实现代码代码的异步执行,在
这种情况下,只要让程序可以等待一个
Timespan,
如果在
Timespan
到达之前
方法内的代码还没有执行完毕、说明该方法执行超时了。
那么关键的就是“等待一个
Timespan
”,而恰好
.NET
里提供了一些类和方法
来实现该功能。我这里选用的是
ManualResetEvent.WaitOne(timespan,
false);
其返回值代码其是否在特定时间内收到信号
,
而我们恰好可以利用这个布
尔值
外加一个标记变量
来判断一个方法是否执行超时。
相关的实现代码如下
:
public delegate void DoHandler();
public class Timeout
{
private ManualResetEvent mTimeoutObject;
//
标记变量
private bool mBoTimeout;
public DoHandler Do;
public Timeout()
{
//
初始状态为
停止
this.mTimeoutObject = new ManualResetEvent(true);
}