如何中止一个正在执行中的方法(求助)C#
我在执行一个查询数据库的方法,我希望执行方法的时间超过5秒时就中止该方法,请问各位大侠有什么好的建议呢?To:kadbbz我现在用到的查询基本上不会用到SqlComman...
我在执行一个查询数据库的方法,我希望执行方法的时间超过5秒时就中止该方法,请问各位大侠有什么好的建议呢?
To:kadbbz
我现在用到的查询基本上不会用到SqlCommand comm = new comm(sql,con); 比如在 linq to sql 中,怎么中止? 展开
To:kadbbz
我现在用到的查询基本上不会用到SqlCommand comm = new comm(sql,con); 比如在 linq to sql 中,怎么中止? 展开
5个回答
展开全部
主要做法有以下两种:
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的超时时间。其他的关于异常捕捉的做法和上面的一样。
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的超时时间。其他的关于异常捕捉的做法和上面的一样。
展开全部
线程最好的办法是使用BackgroundWorker类,如果使用Thread类的Abort方法很容易出现异常。BackgroundWorker类支持取消操作,不会引发异常
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
设置超时ConnectionTimeout属性。
比如用OleDbConnection sqlConn=new OleDbConnection(dbconnectionstring);
sqlConn.ConnectionTimeout=5;
比如用OleDbConnection sqlConn=new OleDbConnection(dbconnectionstring);
sqlConn.ConnectionTimeout=5;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用线程来执行这个方法。
线程可以通过abort来终止。
线程可以通过abort来终止。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以用多线程来解决
不推荐用timer,因为很费资源
不推荐用timer,因为很费资源
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询