请教线程的同步

liuys00 2008-01-14 03:28:27

窗体里两个button,一个btnStart,一个btnClose;
点btnStart,则开始一个线程,在线程里执行方法A()
A()
{
for(int i=0;i<1000;i++)
{
...//数据库操作1
...//数据库操作2
...//数据库操作3
}
}
点btnClose,要求关闭线程。这时出现问题:如果A方法刚执行完毕数据库操作3,这时关闭线程正好。但是如果A方法正在执行数据库操作1或2,我希望他能执行完毕数据库操作3后再退出线程。总之就是希望点击btnclose时,能把for循环的一轮循环执行完毕,然后线程再退出。
请教代码怎样写?谢谢!
...全文
63 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuys00 2008-01-14
  • 打赏
  • 举报
回复
多谢各位!
gwl1984 2008-01-14
  • 打赏
  • 举报
回复
private object locker = new object();

Thread thread = new .... //执行do方法。

void do()
{
lock(locker )
{
for(int i=0;i <1000;i++)
{
...//数据库操作1
...//数据库操作2
...//数据库操作3
}
}
}

void CloseThread()
{
lock(locker)
{
thread.Abort();
}
}
wenbin 2008-01-14
  • 打赏
  • 举报
回复
那你把exposureevent.WaitOne();
exposureevent.Set();
拿到for循环里就OK
liuys00 2008-01-14
  • 打赏
  • 举报
回复
我希望的是点btnClose时,如果本轮循环没执行完毕的话,就让本轮循环执行完,然后再立即停止线程.
如果本轮循环执行完毕的话,就立即停止线程.

wenbin 2008-01-14
  • 打赏
  • 举报
回复
public static AutoResetEvent exposureevent = new AutoResetEvent(false);
exposureevent.WaitOne();
for(int i=0;i <1000;i++)

{
...//数据库操作1
...//数据库操作2
...//数据库操作3
}
exposureevent.Set();

在btnClose里

exposureevent.WaitOne();
关闭线程

exposureevent.Set();
blestcc 2008-01-14
  • 打赏
  • 举报
回复
给一个变量 ,在执行完数据库操作3时判断变量的值来决定是否要退出.btnClose负责改变变量的值

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧