【问题标题】:Can I start Win 8 background task manualy我可以手动启动Win 8后台任务吗
【发布时间】:2012-11-29 15:30:00
【问题描述】:

我在我的应用程序中使用 C#,在用户登录他的 PC 后,实时磁贴开始更新非常重要。现在更新开始时间不早于 15 分钟,因为我正在使用时间触发器进行实时磁贴更新。有什么方法可以手动触发任务,还是有其他方法可以让我的动态磁贴从用户登录系统开始更新?

【问题讨论】:

  • 我不相信有一种方法可以立即运行您的后台任务。但是,可以使用定期磁贴更新或推送通知在用户登录时更新动态磁贴。

标签: c# windows windows-8


【解决方案1】:

您不能手动调用后台任务,但您可以简单地使用后台任务运行的代码创建一个共享库,然后直接从后台任务调用它。然后,您可以在想要从应用程序手动触发它时手动调用该代码。

【讨论】:

  • 好吧,我的问题是,当我启动计算机并登录它时,任务在 15 分钟后开始,因为计时器仅在 15 分钟标记处触发任务。那么有没有办法让它在用户登录时触发一次,然后每 15 分钟触发一次?
  • 是的,您可以这样做,请参见此处:msdn.microsoft.com/en-us/library/windows/apps/xaml/…。您需要使用 SessionConnected 系统事件。不过,您的应用程序需要作为锁屏应用程序运行。
【解决方案2】:

UserPresent SystemTriggerType 可能是您所追求的。我正在考虑这样做的方式是同时拥有时间和系统触发器,因此每 15 分钟以及当用户解锁设备时。 我不认为您使用 SystemTrigger 可以获得尽可能多的 CPU 时间,但总比没有好 http://msdn.microsoft.com/en-us/library/windows/apps/windows.applicationmodel.background.systemtriggertype.aspx

【讨论】:

    【解决方案3】:

    DispatcherTimer 可以帮助您以设定的时间间隔触发事件。您可以在 App() 构造函数中添加代码:

        // _dispatcherTimer is probably a class level variable.
        DispatcherTimer _dispatcherTimer;
    
    
        // How often
        uint _DoSomethingInterval = 500;
    
        // Set up a DispatchTimer
        _dispatcherTimer = new DispatcherTimer();
        _dispatcherTimer.Tick += DoSomething;
    
        // If you like lambdas, do this
        //_dispatcherTimer.Tick += (sender, object ) => 
        // { Debug.WriteLine("time passed so do something"); }
    
    
        _dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, (int)_desiredReportInterval);
    
        // The callback for the timer
        private void DoSomething(object sender, object args)
        {
            Debug.WriteLine("time passed so do something"); 
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-25
      • 1970-01-01
      • 1970-01-01
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多