在我的应用程序中,我需要一个后台线程,每隔N秒与服务器联系......
我这样做了:
Task.Factory.StartNew (() => {
while(true)
{
Thread.Sleep (10000);
...do my stuff...
}
});
此解决方案正常但我需要知道是否有更好的解决方案。 (例如:Task.Delay(10000)是一个更好的解决方案吗?)
非常感谢!
答案 0 :(得分:2)
如果你需要使用UI,你可以使用DaveDev的例子,否则下面的例子也可以。如果您想在此示例中使用UI,则必须使用控件的Invoke
或BeginInvoke
方法。
using System;
using System.Threading;
class TimerExample
{
static void Main()
{
// Create a timer that signals the delegate to invoke
// CheckStatus after one second, and every 1/4 second
// thereafter.
Timer stateTimer = new Timer(CheckStatus);
// Change the period to every 1/2 second.
stateTimer.Change(0, 500);
}
public static void CheckStatus(Object stateInfo) {
...
}
}
我认为在这种情况下知道为什么不使用Thread.Sleep
很重要。如果你使用sleep,它会锁定线程。如果您使用计时器,那么该线程可用于在此期间执行其他任务。
答案 1 :(得分:0)
_timer = new DispatcherTimer();
_timer.Tick += timer_Tick;
_timer.Interval = new TimeSpan(0, 0, 0, 1);
_timer.Start();
private void timer_Tick(object sender, EventArgs e)
{
BackgroundWorker backgroundWorker = new BackgroundWorker();
backgroundWorker.DoWork += (s, a) =>
{
//do your stuff
};
backgroundWorker.RunWorkerAsync();
}