Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 每分钟运行一次Windows应用商店应用程序后台任务?_C#_Windows Store Apps_Task_Backgroundworker - Fatal编程技术网

C# 每分钟运行一次Windows应用商店应用程序后台任务?

C# 每分钟运行一次Windows应用商店应用程序后台任务?,c#,windows-store-apps,task,backgroundworker,C#,Windows Store Apps,Task,Backgroundworker,我正在编写windows应用商店应用程序,该应用程序需要根据用户的选择,每1分钟、2分钟或5分钟同步一次数据(这是客户端的必备要求)。据我所知,在15分钟内运行后台任务是不可能的。有没有办法实施?这适用于针对Windows 8.1的基于选项卡的应用程序 如果我每分钟手动编写一个线程来运行同步,那么线程类和功能应该放在哪里,这样当用户切换页面时它就不会停止 我知道这个问题是重复的。但如果有人找到了方法或解决办法,请再次询问 否。在Windows Phone中,您无法控制运行后台任务。若用户实际上并

我正在编写windows应用商店应用程序,该应用程序需要根据用户的选择,每1分钟、2分钟或5分钟同步一次数据(这是客户端的必备要求)。据我所知,在15分钟内运行后台任务是不可能的。有没有办法实施?这适用于针对Windows 8.1的基于选项卡的应用程序

如果我每分钟手动编写一个线程来运行同步,那么线程类和功能应该放在哪里,这样当用户切换页面时它就不会停止


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

否。在Windows Phone中,您无法控制运行后台任务。若用户实际上并没有和系统时间交互,后台任务甚至可能被操作系统关闭


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

我在Windows Phone中使用该类使用异步套接字每分钟从服务器刷新一个项目列表,也许您可以根据需要修改该类(也许您还想存储一些数据)


谢谢这适用于针对Windows 8.1的基于选项卡的应用程序。
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();
    }
}