如何中止一个正在执行中的方法(求助)C#

来源:百度知道 编辑:UC知道 时间:2024/06/29 01:05:40
我在执行一个查询数据库的方法,我希望执行方法的时间超过5秒时就中止该方法,请问各位大侠有什么好的建议呢?
To:kadbbz
我现在用到的查询基本上不会用到SqlCommand comm = new comm(sql,con); 比如在 linq to sql 中,怎么中止?

主要做法有以下两种:
1. 多线程操作,对线程进行定时,如果超时则停止。这个机制微软给出了BackgroundWorker,但是不够灵活不建议使用。优点是足够灵活,代码比较优雅。

private void DoQuery()
{
//Query work
}

private void start()
{
Thread th = new Thread(new ThreadStart(this.DoQuery));
th.Start();
DateTime dt1 = DateTime.Now;
While(th.ThreadState != ThreadState.Stopped)
{
if((DateTime.Now-dt1).Seconds>5)
{
try
{
th.Abort();
}
catch
{
}
break;
}
Application.DoEvent();
}

}

2. 使用数据库查询的超时,不过不是楼上说道的ConnectionTimeout而是Query的CommandTimeout,可以在SqlCommand中设置。建议使用这个(不过一定不要忘记捕捉异常)!
如果是SQL Server的话:

SqlCommand comm = new comm(sql,con);
comm.CommandTimeout = 3;
try
{
comm.ExecuteNonQuery():
}
catch
{
Console.WriteLine("TimeOut");
}
}

Ps:如果是linq的话,在DataContext中有CommandTimeout属性,设置这个就可以控制SubmitChanges的超时时间。其他的关于异常捕捉的做法和上面的一样。

<