我现在有一个服务。里面会执行2个事件。一个是每隔1秒执行事件A 一个是每隔5秒执行事件B 用2个timer控件去控制时间
但是现在遇到的问题就是始终只能执行一个事件 2个事件无法同时执行。求解决办法!!!!我要2个事件去同时执行。该怎么处理!
private void FormRun_Load(object sender, EventArgs e)
{
//Log.writeServiceLog("服务正常启动时间: " + DateTime.Now.ToString());
Start();
StartAG();
} public void Start()
{
Thread timer = new Thread(new ThreadStart(Timer)); //新建一个线程,该线程调用Timer()
timer.Start(); //启动线程
Console.CursorVisible = false; //隐藏光标
Console.ReadKey(true); //等待按任意键退出
timer.Abort(); //终止线程,用于停止秒表
} public void StartAG()
{
//再次提醒
Thread taskTimer = new Thread(new ThreadStart(TaskTimer)); //新建一个线程,该线程调用Timer()
taskTimer.Start(); //启动线程
Console.CursorVisible = false; //隐藏光标
Console.ReadKey(true); //等待按任意键退出
taskTimer.Abort();
} private void Timer()
{
while (true)
{
this.SynMessage(); //显示秒表计数
Thread.Sleep(1000); //等待1秒后再执行Timer()刷新计数 }
}
private void TaskTimer()
{
while (true)
{
this.SynMessageAgain(); //显示秒表计数
Thread.Sleep(5000); //等待5秒后再执行Timer()刷新计数 }
}
但是现在遇到的问题就是始终只能执行一个事件 2个事件无法同时执行。求解决办法!!!!我要2个事件去同时执行。该怎么处理!
private void FormRun_Load(object sender, EventArgs e)
{
//Log.writeServiceLog("服务正常启动时间: " + DateTime.Now.ToString());
Start();
StartAG();
} public void Start()
{
Thread timer = new Thread(new ThreadStart(Timer)); //新建一个线程,该线程调用Timer()
timer.Start(); //启动线程
Console.CursorVisible = false; //隐藏光标
Console.ReadKey(true); //等待按任意键退出
timer.Abort(); //终止线程,用于停止秒表
} public void StartAG()
{
//再次提醒
Thread taskTimer = new Thread(new ThreadStart(TaskTimer)); //新建一个线程,该线程调用Timer()
taskTimer.Start(); //启动线程
Console.CursorVisible = false; //隐藏光标
Console.ReadKey(true); //等待按任意键退出
taskTimer.Abort();
} private void Timer()
{
while (true)
{
this.SynMessage(); //显示秒表计数
Thread.Sleep(1000); //等待1秒后再执行Timer()刷新计数 }
}
private void TaskTimer()
{
while (true)
{
this.SynMessageAgain(); //显示秒表计数
Thread.Sleep(5000); //等待5秒后再执行Timer()刷新计数 }
}
StartAG();这两个函数返回都会杀掉线程
当然不能同时执行
{
Thread timer = new Thread(new ThreadStart(Timer)); //新建一个线程,该线程调用Timer()
timer.Start(); //启动线程
Console.CursorVisible = false; //隐藏光标
Console.ReadKey(true); //等待按任意键退出
timer.Abort(); //终止线程,用于停止秒表
}
执行到Console.ReadKey(true); //等待按任意键退出
主线程被阻塞
不按键无法继续,无法执行StartAG();线程taskTimer不启动
按键timer.Abort()线程终止
StartAG();可以执行线程taskTimer启动
所以不会同时执行
Thread timer;
Thread taskTimer ;
private void FormRun_Load(object sender, EventArgs e)
{
//Log.writeServiceLog("服务正常启动时间: " + DateTime.Now.ToString());
Start();
StartAG();
Console.ReadKey(true); //等待按任意键退出
timer.Abort(); //终止线程,用于停止秒表
taskTimer.Abort();
} public void Start()
{
timer = new Thread(new ThreadStart(Timer)); //新建一个线程,该线程调用Timer()
timer.Start(); //启动线程
Console.CursorVisible = false; //隐藏光标
} public void StartAG()
{
//再次提醒
taskTimer = new Thread(new ThreadStart(TaskTimer)); //新建一个线程,该线程调用Timer()
taskTimer.Start(); //启动线程
Console.CursorVisible = false; //隐藏光标
} private void Timer()
{
while (true)
{
this.SynMessage(); //显示秒表计数
Thread.Sleep(1000); //等待1秒后再执行Timer()刷新计数 }
}
private void TaskTimer()
{
while (true)
{
this.SynMessageAgain(); //显示秒表计数
Thread.Sleep(5000); //等待5秒后再执行Timer()刷新计数 }
}用Abort结束线程不是好习惯,因为你不知道执行到哪了。尽量让线程正常退出。
System.Threading