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

我在执行一个查询数据库的方法,我希望执行方法的时间超过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的超时时间。其他的关于异常捕捉的做法和上面的一样。
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-11-25
线程最好的办法是使用BackgroundWorker类,如果使用Thread类的Abort方法很容易出现异常。BackgroundWorker类支持取消操作,不会引发异常
第2个回答  2008-11-25
设置超时ConnectionTimeout属性。
比如用OleDbConnection sqlConn=new OleDbConnection(dbconnectionstring);
sqlConn.ConnectionTimeout=5;
第3个回答  2008-11-25
使用线程来执行这个方法。
线程可以通过abort来终止。
第4个回答  2008-11-25
可以用多线程来解决
不推荐用timer,因为很费资源

如何中止一个正在执行中的方法(求助)C#
主要做法有以下两种:1. 多线程操作,对线程进行定时,如果超时则停止。这个机制微软给出了BackgroundWorker,但是不够灵活不建议使用。优点是足够灵活,代码比较优雅。private void DoQuery(){ \/\/Query work } private void start(){ Thread th = new Thread(new ThreadStart(this.DoQuery));th.Star...

C# winform程序 如何终止一个方法的执行 并返回主界面
如果你的异常处理添加在A1()中,那么异常处理之后仅仅返回到A1()的上层调用函数,也就是A()中。由于A1()已经处理了异常,所以对于A()这一层而言,并没有异常发生,所以程序会继续,从而A2和A3将继续被执行。如果你想中止A2和A3,那么你的异常处理必须写在调用它们的函数,也就是A()中。

c#如何中断程序的执行
如果不是调试程序的话用 Environment.Exit(0);\/\/退出运行 Console.Readkey();\/\/控制台暂停执行 Thread.Sleep(1000);\/\/放在主线程中使程序-1s

C#中关闭程序时如何自动结束正在运行的线程?
\/\/窗体关闭事件中添加如下代码 if(this.thread != null || this.thread.IsAlive){ this.thread.Abort();this.thread = null;} \/\/就OK了

C#递归在执行过程中,如何让它停止
1:那就在设置判断条件,不就可以停止了吗?2:如果你是在IDE环境中调试,可以用单步执行来让程序停止。

c#怎么退出在正在执行的等待语句
streamreader.BaseStream.ReadTimeout = 1000;设置一下超时时间看看,这里设置的1秒

C#终止程序
要跳出,很简单 break;就可以 如果代码在一个函数体内,return;要直接终止程序,直接释放窗体 this.Dispose(); 即可 //补充 c#控制台程序用 Application.Exit()即可终止程序 但如果是窗体应用就得调用窗口释放函数来达到退出程序的效果即上面的dispose函数 ...

c# 如何结束函数
最后一个是Process.Close方法。抱歉它根本不是用来结束进程的!这个方法名字有些误导,其实根本则不然。它仅仅是而是IDisposable的Dispose方法的具体执行,用来进行Process类的托管资源清理的!由于Process类继承自Component类,后者继承IDisposable而同时又有析构函数,而通过一个继承类可改写的Dispose方法(参数...

C#如何在一个方法里面停止另外一个方法的执行(都在一个类里面)
多线程? 只能在一个方法里把其他的子线程中断。要不然你就只能在方法里访问一些全局变量,通过这些变量的值来 控制要不要停止当前的方法。比如:方法1中,不断访问 bool1 这个布尔型变量,当bool1的值为true就退出。 要停止方法1 时,就把bool1的值设为 true MSDN 上 演示引发异常的任务取消的基本...

如何让C#程序在执行中暂停一段时间
在线程中,如果要暂停一定的时间,可以使用Thread的Sleep方法,让线程暂停。在微软新的win8API中,已经用Task来实现原来用线程实现的许多功能,同样,Task也有Delay方法,让程序暂停一定的时间。以下程序利用System.Threading.Timer让程序每隔间隔的时间执行回调方法:using System;using System.Collections.Generic...

相似回答