我知道有Thread.Sleep和System.Windows.Forms.Timer和Monitor.Wait在C#和Windows窗体中。我似乎无法弄清楚如何在不锁定线程的情况下等待X秒然后执行其他操作。我有一个带有按钮的表单。单击按钮时,计时器将启动并等待5秒钟。在这5秒之后,窗体上的一些其他控件变为绿色。使用Thread.Sleep时,整个应用程序会在5秒内无响应-那么我如何才能“在5秒后做某事”? 最佳答案 (转录自Ben作为评论)justuseSystem.Windows.Forms.Timer.Setthetimerf
我知道有Thread.Sleep和System.Windows.Forms.Timer和Monitor.Wait在C#和Windows窗体中。我似乎无法弄清楚如何在不锁定线程的情况下等待X秒然后执行其他操作。我有一个带有按钮的表单。单击按钮时,计时器将启动并等待5秒钟。在这5秒之后,窗体上的一些其他控件变为绿色。使用Thread.Sleep时,整个应用程序会在5秒内无响应-那么我如何才能“在5秒后做某事”? 最佳答案 (转录自Ben作为评论)justuseSystem.Windows.Forms.Timer.Setthetimerf
那么您认为防止C#Windows服务的多个线程同时运行的最佳方法是什么(该服务使用timer和OnElapsed事件)?使用lock()或mutex?我似乎无法理解mutex的概念,但使用lock()似乎很适合我的情况。无论如何,我是否应该花时间学习如何使用mutex? 最佳答案 使您的计时器成为一次性计时器,并在elapsed事件处理程序中重新初始化它。例如,如果您正在使用System.Timers.Timer,您可以像这样初始化它:myTimer.Elapsed=timer1Elapsed;myTimer.Interval=10
那么您认为防止C#Windows服务的多个线程同时运行的最佳方法是什么(该服务使用timer和OnElapsed事件)?使用lock()或mutex?我似乎无法理解mutex的概念,但使用lock()似乎很适合我的情况。无论如何,我是否应该花时间学习如何使用mutex? 最佳答案 使您的计时器成为一次性计时器,并在elapsed事件处理程序中重新初始化它。例如,如果您正在使用System.Timers.Timer,您可以像这样初始化它:myTimer.Elapsed=timer1Elapsed;myTimer.Interval=10
这个问题与C#有关,但也可能适用于其他语言。我对使用如下代码持保留态度:usingSystem.Windows.Forms;classMyForm:Form{privateTimermyTimer;privateButtonmyButton;publicMyForm(){//Initializethecomponents,etc.myTimer.Tick+=newEventHandler(myTimer_Tick);myButton.Click+=newEventHandler(myButton_Click);myTimer.Start();}privatevoidmyTimer_Ti
这个问题与C#有关,但也可能适用于其他语言。我对使用如下代码持保留态度:usingSystem.Windows.Forms;classMyForm:Form{privateTimermyTimer;privateButtonmyButton;publicMyForm(){//Initializethecomponents,etc.myTimer.Tick+=newEventHandler(myTimer_Tick);myButton.Click+=newEventHandler(myButton_Click);myTimer.Start();}privatevoidmyTimer_Ti