正直なところ、私は死んだ馬を打ち負かそうとしているわけではありません。スレッドの強制終了に関するすべてのアドバイスを読みましたが、コードを検討してください。次のことを行います。
- スレッドを開始します(
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(); }
実際にスレッドを強制終了することは可能ですか?