Timer in UWP App which isn't linked to the UI

后端 未结 3 1744
灰色年华
灰色年华 2020-12-10 12:06

I\'m working on an UWP MVVM project and would like to implement an automatic logout system if the user interaction stops for a specific time.
Until now I\'m using a

相关标签:
3条回答
  • 2020-12-10 12:20

    You may be right at your code but I have used threadpool timer instead of dispacher timer, after referring above blog.

    If I talk about initial level I was using dispatcher timer for my app, what happens actually, it goes hang after every 2days of continuous standby. So I thought of threadpool timer as you are referring in this blog, but in threadpool it went hung in just 5-6 hours.

    So as per my experience I think dispatcher timer is more preferable than threadpool timer.

    It's just my experience of using it.

    0 讨论(0)
  • 2020-12-10 12:24

    I resolved this issue recently using a ThreadPoolTimer class.

    ThreadPoolTimer timer = ThreadPoolTimer.CreatePeriodicTimer((t) =>
            {
                //do some work \ dispatch to UI thread as needed
            }, TimeSpan.FromMinutes(1));
    

    At present I am not aware of any advantage of this over the Timer solution already posted, but it has functioned well.

    0 讨论(0)
  • 2020-12-10 12:35

    Yes - you can for example use Timer class - though you must remember that it run on separate thread. Example:

    private Timer timer;
    public MainPage()
    {        
        this.InitializeComponent();
        timer = new Timer(timerCallback, null, (int)TimeSpan.FromMinutes(1).TotalMilliseconds, Timeout.Infinite);
    }
    
    private async void timerCallback(object state)
    {
        // do some work not connected with UI
    
        await Window.Current.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
            () => {
                // do some work on UI here;
            });
    }
    

    Note that the work dispatched on UI dispatcher may not be processed right away - it depend on dispatcher's workload.

    Also remember that this timer runs along with your app and won't work when app is suspended.

    0 讨论(0)
提交回复
热议问题