Windows Store App后台任务每分钟运行一次?

时间:2014-12-12 10:53:07

标签: c# windows-store-apps task backgroundworker

我正在编写windows store应用程序,它需要根据用户的选择每隔1分钟,2分钟或5分钟同步数据(这是客户端必须要求的)。据我所知,不可能在不到15分钟的时间内运行后台任务。有没有办法实施?这适用于面向Windows 8.1的基于选项卡的应用程序

如果我每分钟手动编写一个线程来运行同步,那么线程类和功能应放在何处,以便在用户切换页面时不会停止?

我知道这个问题与this重复。但是,如果有人找到方法或解决方法,请再次询问。

2 个答案:

答案 0 :(得分:1)

没有。在Windows Phone中,您无法控制运行后台任务。如果用户实际上没有与系统时间交互,则后台任务甚至可以由操作系统关闭。

一种方法是发送推送通知,但在所有情况下都不可行。

答案 1 :(得分:1)

我已经在Windows Phone中使用此类使用AsyncSockets从服务器每分钟刷新一个Items列表,也许你可以根据需要修改这个类(也许你想存储一些数据)

public class BackgroundWorker : IDisposable
{
    private static readonly BackgroundWorker SingleWorker = new BackgroundWorker();
    public static BackgroundWorker GetInstance()
    {
        return SingleWorker;
    }

    private readonly Thread _worker;
    private bool _disposed = false;
    private readonly AutoResetEvent _are = new AutoResetEvent(false); //can't remeber if it is true or false

    private BackgroundWorker()
    {
        _worker = new Thread(HandleWorker);
        _worker.Start();
    }

    private void HandleWorker()
    {
        while (true)
        {
            _are.Reset();

            //Check if there is work to be done
            //Do Work


            _are.Set();

            //Add a wait here Like wait for 2 minutes before you continue
        }
    }

    public void WaitForCompletion()
    {
        if (_disposed)
            throw new ObjectDisposedException(this.GetType().Name,"Object cannot be accessed when disposed");
        _are.WaitOne();
    }

    public void Dispose()
    {
        _disposed = true;
        _worker.Abort(0x0);
        _are.Set();
    }
}