在MSDN中,Thread.Abort()方法的描述说:"调用此方法通常会终止线程."
为什么不总是?
在哪些情况下它不会终止线程?
有没有其他可能终止线程?
所以我知道你不应该使用
Thread.Abort()
Run Code Online (Sandbox Code Playgroud)
但我从未得到过很好的解释.是否存在性能损失或隐藏的问题?
我知道你不能忽略/吞下ThreadAbortException(这是有道理的)
在下面的代码中,我有一个while(true)循环.考虑到try块中存在一些代码的情况,其中线程应该执行一些约需一分钟的任务,但是由于某些预期的问题,它正在运行.我们可以阻止那个线程吗?
public class thread1 implements Runnable {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
thread1 t1 = new thread1();
t1.run();
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
try{
Thread.sleep(10);
}
catch(Exception e){
e.printStackTrace();
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我不是想给打一个死 马,诚实.我已经阅读了有关线程查杀的所有建议,但请考虑代码.它执行以下操作:
StartThread
方法)WAITFOR
命令 - 这意味着它将一直坐在那里直到队列中有东西.这一切都在MonitorQueue
方法中.杀死线程.我试过.Interrupt
- 似乎什么也没做.然后我尝试了.Abort
,永远不应该使用,但即使这样做也没有.
Thread thxMonitor = new Thread(MonitorQueue);
void StartThread() {
thxMonitor.Start();
}
void MonitorQueue(object obj) {
var conn = new SqlConnection(connString);
conn.Open();
var cmd = conn.CreateCommand();
cmd.CommandTimeout = 0; // forever and ever
cmd.CommandType = CommandType.Text;
cmd.CommandText = "WAITFOR (RECEIVE CONVERT(int, message_body) AS Message FROM SBQ)";
var dataTable = new DataTable();
var da = new SqlDataAdapter(command); …
Run Code Online (Sandbox Code Playgroud)我正在使用visual studio 2013调试ASP页面.
所以,我设置了一个断点,断点被击中,执行被搁置.
现在,我只想中止当前请求 停止执行当前请求的代码(当它已经达到断点时处于保持状态),而不必停止调试并再次运行项目.
这似乎太简单了,但我还没弄明白该怎么做.
让我明确指出单击"重启" 不是我需要的,因为"重启"只是停止项目并再次运行的快捷方式.
我有一个线程,在我们的(旧)SQL服务器上查找数据.
当数据进入时,我将信息发布到模态对话框 - 在进行所有这些处理时,用户不能也不应该做任何其他事情.模态对话框只是让他们看到我正在做某事并阻止他们同时运行另一个查询.
有时(很少)当代码调用SQL服务器时,服务器没有响应(IT将其关闭以进行维护,LAN线被切断,或者PC不在网络上)或执行查询的人时间不多了.因此,模态对话框确实有一个取消按钮.
Thread对象(System.Threading.Thread)有IsBackground=true
.
当有人点击取消时,我会调用我的KillThread
方法.
注意:我不能在此类中使用BackgroundWorker组件,因为它与某些Windows Mobile 5代码共享,而WM5没有BackgroundWorker.
void KillThread(Thread th) {
if (th != null) {
ManualResetEvent mre = new ManualResetEvent(false);
Thread thread1 = new Thread(
() =>
{
try {
if (th.IsAlive) {
//th.Stop();
// 'System.Threading.Thread' does not contain a definition for 'Stop'
// and no extension method 'Stop' accepting a first argument of type
// 'System.Threading.Thread' could be found (are you missing a using
// directive or an assembly reference?) …
Run Code Online (Sandbox Code Playgroud)