代码如下 线程开始后 怎么停不掉??
看网上说一般过几秒钟后就会停止掉抛异常的
我等了几分钟还是停不掉 WHY?
请高手指点下 Thread t = null;
//开始
private void btnStart_Click(object sender, EventArgs e)
{
t = new Thread(new ThreadStart(LoopAccessData)); t.IsBackground = true;
t.Start();
} //停止
private void btnEnd_Click(object sender, EventArgs e)
{
try
{
t.Abort();
}
catch (ThreadAbortException err)
{ }
}
//线程体
void LoopAccessData()
{
OracleConnection con = new OracleConnection("data source=xx;User ID=xx;Password=xx");
OracleCommand com = con.CreateCommand();
com.CommandText = "sp_test_threadloopdata";
com.CommandType = CommandType.StoredProcedure;
con.Open();
com.ExecuteNonQuery(); // 非常非常的久
con.Close();
}
看网上说一般过几秒钟后就会停止掉抛异常的
我等了几分钟还是停不掉 WHY?
请高手指点下 Thread t = null;
//开始
private void btnStart_Click(object sender, EventArgs e)
{
t = new Thread(new ThreadStart(LoopAccessData)); t.IsBackground = true;
t.Start();
} //停止
private void btnEnd_Click(object sender, EventArgs e)
{
try
{
t.Abort();
}
catch (ThreadAbortException err)
{ }
}
//线程体
void LoopAccessData()
{
OracleConnection con = new OracleConnection("data source=xx;User ID=xx;Password=xx");
OracleCommand com = con.CreateCommand();
com.CommandText = "sp_test_threadloopdata";
com.CommandType = CommandType.StoredProcedure;
con.Open();
com.ExecuteNonQuery(); // 非常非常的久
con.Close();
}
2. 存储过程用事务的方式来执行, transaction = con.BeginTransaction(); 在LoopAccessData的catch里面加入transaction.Rollback, 试下回滚会不会有反应t.Abort();时, 可以进入到LoopAccessData的catch块3. 找一个可以停止数据库存储过程的方法, btnEnd_Click里结束线程的同时, 再一次连接到数据库, 把存储过程给停了
死在com.ExecuteNonQuery()了3应该可以实现效果 但是不是解决我线程的问题还有谁知道 问题么 怎么停不掉 要怎么样才能停掉
private volatile bool _shouldStop;
while(!_shouldStop)
{
// do something
Thread.Sleep(10000);//适当的使线程放弃执行资源获取的机会,可以帮助系统调整资源调配,有助于 系统和程序的稳定。
}
要停止时,只要将_shouldStop设为 true就可以了
try
{
t.join(20000);//写入你线程的执行时间
}
catch (ThreadAbortException err)
{ }