windows服务,如何单线程运行? 我在windows服务中调用System.Timers.Timer每隔一段时间执行一段代码。现在的问题是在执行这段代码的时候windows服务还是会触发Timer的Elapsed事件,如何让在执行Elapsed事件里的代码的时候不让外面的线程再运行? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 让外面的线程与触发Timer的Elapsed事件同步就行了 好辦,在Elapsed中寫Timer.Stop();//your workTimer.Start(); Thread myThread = new Thread(new ThreadStart(threadProc));myThread.Start();myThread.Join();我在Elapsed事件中这么写,不知道可不可以把主进程阻止掉? 没太明白,你是在Timer的Elapsed事件中启动一个线程? 不行,这样只是在线程结束时完成此次的Elapsed事件,并不能使Elapsed事件不再次被触发,Elapsed事件是到时间就触发,并不是等到上一次的事件完成后再触发,每次被触发都是在一个新的线程中执行,与上一次的触发之间没有任何关系。 try..可以这样,用个互斥量..private Mutex mx=new Mutext();timer的Elapsed事件下:mx.WaitOne();Thread myThread = new Thread(new ThreadStart(threadProc));myThread.Start();myThread.Join();mx.ReleaseMutex(); 当然用timer.Stop()和timer.Start()也是可以的..只不过效果有点不一样.. 使用timer.Stop和Start方法:public static System.Timers.Timer timer = new System.Timers.Timer(); public static Mutex mx = new Mutex(); static void Main(string[] args) { timer.Elapsed += new ElapsedEventHandler(timer_Elapsed); timer.Interval = 3000; timer.Start(); Console.ReadLine(); } static void timer_Elapsed(object sender, ElapsedEventArgs e) { timer.Stop(); //mx.WaitOne(); Debug.WriteLine(System.DateTime.Now.ToString() + ":" + System.DateTime.Now.Millisecond); System.Threading.Thread.Sleep(1000); //mx.ReleaseMutex(); timer.Start(); }输出如下:2007-1-9 12:37:35:5152007-1-9 12:37:40:3902007-1-9 12:37:44:4062007-1-9 12:37:48:4062007-1-9 12:37:52:4212007-1-9 12:37:56:4372007-1-9 12:38:00:4372007-1-9 12:38:04:4682007-1-9 12:38:08:4682007-1-9 12:38:12:4842007-1-9 12:38:16:5002007-1-9 12:38:20:5002007-1-9 12:38:24:5002007-1-9 12:38:28:5002007-1-9 12:38:32:5002007-1-9 12:38:36:5622007-1-9 12:38:40:750 使用Mutext:public static System.Timers.Timer timer = new System.Timers.Timer(); public static Mutex mx = new Mutex(); static void Main(string[] args) { timer.Elapsed += new ElapsedEventHandler(timer_Elapsed); timer.Interval = 3000; timer.Start(); Console.ReadLine(); } static void timer_Elapsed(object sender, ElapsedEventArgs e) { //timer.Stop(); mx.WaitOne(); Debug.WriteLine(System.DateTime.Now.ToString() + ":" + System.DateTime.Now.Millisecond); System.Threading.Thread.Sleep(1000); mx.ReleaseMutex(); //timer.Start(); }输出:2007-1-9 12:39:22:3752007-1-9 12:39:25:4682007-1-9 12:39:28:5312007-1-9 12:39:31:5312007-1-9 12:39:34:5462007-1-9 12:39:37:5462007-1-9 12:39:40:5462007-1-9 12:39:43:5462007-1-9 12:39:46:5462007-1-9 12:39:49:5462007-1-9 12:39:52:5462007-1-9 12:39:55:5462007-1-9 12:39:58:5462007-1-9 12:40:01:5462007-1-9 12:40:04:5462007-1-9 12:40:07:5622007-1-9 12:40:10:562 C# 获取文件大小问题 主窗体show子窗体,但主窗体仍然可操作怎么实现? 高分请教用C#写的ACTIVEX控件嵌入到网页中有的机子上无法显示的问题? C#初学者问题 关于控件 存储过程的问题,执行结果和SQL执行结果不一致!大家来帮下忙啊! 在线等:如何获取Repeater中DropDownList的所选值,有劳大家了! 泛型小问题.. C# file.copy的问题 关于C#多线程调用的方法中长时间循环界面越来越卡顿的问题 用System.Environment.UserName可以得到用户的login,可是如何得到“全名”? c#的资源管理系统? 让QQ机器人聪明点,再聪明点
Timer.Stop();
//your work
Timer.Start();
private Mutex mx=new Mutext();
timer的Elapsed事件下:
mx.WaitOne();
Thread myThread = new Thread(new ThreadStart(threadProc));
myThread.Start();
myThread.Join();
mx.ReleaseMutex();
public static Mutex mx = new Mutex(); static void Main(string[] args)
{
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
timer.Interval = 3000;
timer.Start();
Console.ReadLine();
} static void timer_Elapsed(object sender, ElapsedEventArgs e)
{
timer.Stop();
//mx.WaitOne();
Debug.WriteLine(System.DateTime.Now.ToString() + ":" + System.DateTime.Now.Millisecond);
System.Threading.Thread.Sleep(1000);
//mx.ReleaseMutex();
timer.Start();
}输出如下:
2007-1-9 12:37:35:515
2007-1-9 12:37:40:390
2007-1-9 12:37:44:406
2007-1-9 12:37:48:406
2007-1-9 12:37:52:421
2007-1-9 12:37:56:437
2007-1-9 12:38:00:437
2007-1-9 12:38:04:468
2007-1-9 12:38:08:468
2007-1-9 12:38:12:484
2007-1-9 12:38:16:500
2007-1-9 12:38:20:500
2007-1-9 12:38:24:500
2007-1-9 12:38:28:500
2007-1-9 12:38:32:500
2007-1-9 12:38:36:562
2007-1-9 12:38:40:750
public static Mutex mx = new Mutex(); static void Main(string[] args)
{
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
timer.Interval = 3000;
timer.Start();
Console.ReadLine();
} static void timer_Elapsed(object sender, ElapsedEventArgs e)
{
//timer.Stop();
mx.WaitOne();
Debug.WriteLine(System.DateTime.Now.ToString() + ":" + System.DateTime.Now.Millisecond);
System.Threading.Thread.Sleep(1000);
mx.ReleaseMutex();
//timer.Start();
}输出:
2007-1-9 12:39:22:375
2007-1-9 12:39:25:468
2007-1-9 12:39:28:531
2007-1-9 12:39:31:531
2007-1-9 12:39:34:546
2007-1-9 12:39:37:546
2007-1-9 12:39:40:546
2007-1-9 12:39:43:546
2007-1-9 12:39:46:546
2007-1-9 12:39:49:546
2007-1-9 12:39:52:546
2007-1-9 12:39:55:546
2007-1-9 12:39:58:546
2007-1-9 12:40:01:546
2007-1-9 12:40:04:546
2007-1-9 12:40:07:562
2007-1-9 12:40:10:562