C#怎么定时用多线程执行多个任务?

时间:2021-07-02 07:55:50
是这样的 ,想做个数据库同步系统。
里面有多个数据库同步的任务(比如有从oracle 同步到mssql的,,也有mssql同步到oracle的)

所以程序启动的时候他要定时执行这两条同步数据库的任务


      DoWork()
{

  //这里面负责处理数据库的同步任务....
}


比如我点击其中一条任务  就 新建一个线程
Thread thread = new Thread(new ThreadStart(DoWork));
            thread.Start();


但是这样怎么进行定时 就是说 产出了这个子线程之后。子线程定时(比如5秒)地去做DoWork()

要是加上Timer 该怎么写代码啊。?

15 个解决方案

#1


只是启动的时候不用timer吗?
如果是每5秒执一次那就
timer里有一个事件,你事件每次执行那个dowork就行了。把interval设成5秒

#2


学习一下!

#3


不能这样 。。我的主界面是不能出现Timer这个的 。必须是创建一个线程之后,由线程去定时地做这个DoWork()

#4


引用 3 楼 lishanya1 的回复:
不能这样 。。我的主界面是不能出现Timer这个的 。必须是创建一个线程之后,由线程去定时地做这个DoWork()


如果是你说的这样的话,那就只能做一个死循环,然后自己sleep(5秒)然后再创建线程,去做DoWork了,

还有一种思路,你了解一下线程监管,用invoke或者beginInvoke去做

#5


如果不了解使用Timer,请看msdn,或者多找基本入门书专门看timer使用介绍。

#6


while (true)
{
  dowork();
thread.sleep(5000);
}
函数取个名字,
然后用线程调用就行了

#7



TimerCallback tcb = 你那个dowork;
AutoResetEvent autoEvent = new AutoResetEvent(false);
Timer stateTimer = new Timer(tcb, autoEvent, 5000/*你说的5秒钟*/, 250/*时间间隔*/);
autoEvent.WaitOne(5000, false);

#8


就不用这玩意了Thread thread = new Thread(new ThreadStart(DoWork));
  thread.Start();

#10


引用 9 楼 dazhabai 的回复:
http://msdn.microsoft.com/zh-cn/library/system.threading.timer.aspx


+++

#12


mark,进一步研习

#13


循环判断与上次获得的时间之差,这个时间差就是间隔,,然后执行线程

#14


 
DoWork()
{

while(isStop){
      Thread.sleep(5000);// 休息5秒钟
    //这里面负责处理数据库的同步任务....
   }
}

#15


同上,Thread.sleep(5000)
timer控件又不可见的.你用又没关系的.

#1


只是启动的时候不用timer吗?
如果是每5秒执一次那就
timer里有一个事件,你事件每次执行那个dowork就行了。把interval设成5秒

#2


学习一下!

#3


不能这样 。。我的主界面是不能出现Timer这个的 。必须是创建一个线程之后,由线程去定时地做这个DoWork()

#4


引用 3 楼 lishanya1 的回复:
不能这样 。。我的主界面是不能出现Timer这个的 。必须是创建一个线程之后,由线程去定时地做这个DoWork()


如果是你说的这样的话,那就只能做一个死循环,然后自己sleep(5秒)然后再创建线程,去做DoWork了,

还有一种思路,你了解一下线程监管,用invoke或者beginInvoke去做

#5


如果不了解使用Timer,请看msdn,或者多找基本入门书专门看timer使用介绍。

#6


while (true)
{
  dowork();
thread.sleep(5000);
}
函数取个名字,
然后用线程调用就行了

#7



TimerCallback tcb = 你那个dowork;
AutoResetEvent autoEvent = new AutoResetEvent(false);
Timer stateTimer = new Timer(tcb, autoEvent, 5000/*你说的5秒钟*/, 250/*时间间隔*/);
autoEvent.WaitOne(5000, false);

#8


就不用这玩意了Thread thread = new Thread(new ThreadStart(DoWork));
  thread.Start();

#9


#10


引用 9 楼 dazhabai 的回复:
http://msdn.microsoft.com/zh-cn/library/system.threading.timer.aspx


+++

#11


#12


mark,进一步研习

#13


循环判断与上次获得的时间之差,这个时间差就是间隔,,然后执行线程

#14


 
DoWork()
{

while(isStop){
      Thread.sleep(5000);// 休息5秒钟
    //这里面负责处理数据库的同步任务....
   }
}

#15


同上,Thread.sleep(5000)
timer控件又不可见的.你用又没关系的.