C# 给某个方法(带参)设定执行超时时间

方法如下 public void getClassNameByHandleValue(Configuration config)
目前想给这个方法设置一个超时时间 如 5秒没有执行完毕的话则返回一个表示,表示在时间内没有执行完方法。

图片说明
像这种限时执行方法超时后最好还是要有一定的机制确保调用的方法能够结束释放掉占用的资源,否则很容易就内存泄漏。如果用线程去控制的话可以使用Abort()方法强制结束线程,如果不用线程使用一楼提供的方法的话也要自己在Do这个方法里实现一个检测机制保证方法能够执行完毕正常返回

http://www.cnblogs.com/luofuxian/p/9836986.html

先声明一个委托
public delegate bool GetClassName()
再声明一个类包括事件通知字段和结果
public class GetClassNameState
{
private AutoResetEvent _are;
public AutoResetEvent Are
{
get { return _are; }
set { _are = value; }
}

        private bool _result;
        public bool Result
        {
            get { return _result; }
            set { _result = value; }
        }

        public GetClassNameState()
        {
            _are = new AutoResetEvent(false);
            _result = false;
        }
    }
然后把你的方法赋给声明的委托,用异步回调方法就可以实现超时控制了。
GetClassName getClassName = new GetClassName(getClassNameByHandleValue)
GetClassNameState asyncState = new GetClassNameState();

        getClassName.BeginInvoke(new AsyncCallback(GetClassNameCallBack), asyncState);

        if (asyncState.Are.WaitOne("超时时间"))
        {
            if (asyncState.Result)
            {
                //执行成功的操作
            }
            else
            {
                //执行失败的操作
            }
        }
        else
        {
            //超时后执行的操作
        }

public void GetClassNameCallBack(IAsyncResult asyncResult)
{
object asyncState = ((AsyncResult)asyncResult).AsyncState;
GetClassName theGetClassName = (GetClassName)((AsyncResult)asyncResult).AsyncDelegate;
((GetClassNameState)asyncState).Result = theGetClassName.GetClassNameState(asyncResult);
((GetClassNameState)asyncState).Are.Set();
}

手打修改,求采纳啊