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

我在执行一个查询数据库的方法,我希望执行方法的时间超过5秒时就中止该方法,请问各位大侠有什么好的建议呢?To:kadbbz我现在用到的查询基本上不会用到SqlComman... 我在执行一个查询数据库的方法,我希望执行方法的时间超过5秒时就中止该方法,请问各位大侠有什么好的建议呢?
To:kadbbz
我现在用到的查询基本上不会用到SqlCommand comm = new comm(sql,con); 比如在 linq to sql 中,怎么中止?
展开
 我来答
宣义坊的大蚂蚁
2008-11-26 · TA获得超过2830个赞
知道大有可为答主
回答量:1617
采纳率:90%
帮助的人:880万
展开全部
主要做法有以下两种:
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的超时时间。其他的关于异常捕捉的做法和上面的一样。
我溪头0k
2008-11-25 · TA获得超过139个赞
知道答主
回答量:199
采纳率:0%
帮助的人:71.9万
展开全部
线程最好的办法是使用BackgroundWorker类,如果使用Thread类的Abort方法很容易出现异常。BackgroundWorker类支持取消操作,不会引发异常
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友7522791a6
2008-11-25 · TA获得超过1174个赞
知道小有建树答主
回答量:1372
采纳率:50%
帮助的人:981万
展开全部
设置超时ConnectionTimeout属性。
比如用OleDbConnection sqlConn=new OleDbConnection(dbconnectionstring);
sqlConn.ConnectionTimeout=5;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
白沙博客
2008-11-25 · 超过34用户采纳过TA的回答
知道答主
回答量:105
采纳率:0%
帮助的人:0
展开全部
使用线程来执行这个方法。
线程可以通过abort来终止。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
玩转困难
2008-11-25 · TA获得超过1105个赞
知道小有建树答主
回答量:1116
采纳率:0%
帮助的人:724万
展开全部
可以用多线程来解决
不推荐用timer,因为很费资源
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式