老实说,我并不是想打败一匹死 马。而且我已经阅读了关于线程终止的所有建议,但是,请考虑代码。它执行以下操作:
- 它启动一个线程(通过
StartThread
方法) - 它调用数据库在 ServiceBroker 队列中查找任何内容。请注意
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); da.Fill(dataTable); da.Dispose(); } void KillThreadByAnyMeansNecessary() { thxMonitor.Interrupt(); thxMonitor.Abort(); }
真的可以杀死一个线程吗?