如何在特定时间后运行函数

时间:2013-07-11 10:54:29

标签: multithreading windows-phone-7

我想在Windows Phone 7中的特定时间之后有什么办法可以执行某个功能。例如,请在android中查看此代码:

mRunnable=new Runnable() 
{

@Override
public void run() 
 {
 // some work done
}

现在是另一个功能

public void otherfunction()
{
mHandler.postDelayed(mRunnable,15*1000);
}

现在,在执行 otherfunction() 15秒后,将执行上层代码中的工作。 我想知道这在Windows Phone 7中是否也可以。 提前完成所有人..

3 个答案:

答案 0 :(得分:1)

你可以使用线程来做到这一点:

var thread = new Thread(() =>
    {
        Thread.Sleep(15 * 1000);
        Run();
    });

thread.Start();

这样,Run方法将在15秒后执行。

答案 1 :(得分:1)

虽然您可以根据需要使用Reactive Extensions,但实际上并不需要。您可以使用Timer

执行此操作
// at class scope
private System.Threading.Timer myTimer = null;


void SomeMethod()
{
    // Creates a one-shot timer that will fire after 15 seconds.
    // The last parameter (-1 milliseconds) means that the timer won't fire again.
    // The Run method will be executed when the timer fires.
    myTimer = new Timer(() =>
        {
            Run();
        }, null, TimeSpan.FromSeconds(15), TimeSpan.FromMilliseconds(-1));
}

请注意,Run方法在线程池线程上执行。如果您需要修改UI,则必须使用Dispatcher。

这个方法比创建一个只做等待的线程更受欢迎。计时器使用非常少的系统资源。仅当计时器触发时才创建一个线程。另一方面,休眠线程占用了相当多的系统资源。

答案 2 :(得分:0)

无需创建线程。使用 Reactive Extensions (引用Microsoft.Phone.Reactive)可以更轻松地完成此操作:

Observable.Timer(TimeSpan.FromSeconds(15)).Subscribe(_=>{
    //code to be executed after two seconds
});

请注意,代码不会在UI线程上执行,因此您可能需要使用Dispatcher