如何在不使用等待的情况下在系统托盘中显示进度指示器几秒钟[Windows Phone 8]

时间:2014-03-12 14:03:47

标签: c# azure windows-phone-8

每当用户打开我的应用程序时,应用程序都需要检查是否需要上传/下载数据到/来自windows azure。但是,如果用户没有互联网连接,则应用程序将在系统托盘中显示上次更新时间。该应用程序从SQLite获取最后一次更新时间,不需要使用await方法来执行此操作。那么,如何将系统托盘中的文本持续几秒钟才能淡出。

这是我的代码

protected async override void OnNavigatedTo(NavigationEventArgs e)
    {
        if (SessionManagement.IsLoggedIn())
        {
            var userLastestPoopDataInSQLite = new SQLiteFunctions().GetUserPoopData(SessionManagement.GetEmail());
            if (userLastestPoopDataInSQLite.Count != 0)
            {
                userLastestpoopRecordInSqlite = userLastestPoopDataInSQLite.Last();
                if (!NetworkInterface.GetIsNetworkAvailable())
                {
                    SystemTray.ProgressIndicator = new ProgressIndicator();
                    SystemTray.ProgressIndicator.Text = GetLastUpdatedTimeInText(userLastestpoopRecordInSqlite.Date_Time);
                    SystemTray.ProgressIndicator.IsVisible = true;
                }
                else
                {
                    isUpdateNeeded = DateTime.Compare(userLastestpoopRecordInSqlite.Date_Time, userLastestPoopRecordInAzure.Date_Time);
                    Debug.WriteLine("Lastest time in Sqlite" + userLastestpoopRecordInSqlite.Date_Time);
                    Debug.WriteLine("Lastest time in azure" + userLastestPoopRecordInAzure.Date_Time);
                    Debug.WriteLine(isUpdateNeeded);
                    if (isUpdateNeeded == 0)
                    {
                        SystemTray.ProgressIndicator = new ProgressIndicator();
                        SystemTray.ProgressIndicator.Text = "Data is up-to-date";
                        SystemTray.ProgressIndicator.IsVisible = true;
                    }
                    else
                    {
                        userLastestPoopDataInAzure = await new AzureFunctions().GetUserPoopDataInAzure(SessionManagement.GetEmail());
                        userLastestPoopRecordInAzure = userLastestPoopDataInAzure.Last();
                        StartSyncUserLastestData();
                    }
                }
            }
        }
    }

谢谢

1 个答案:

答案 0 :(得分:3)

没有内置支持在有限时间内显示进度条,因此您可能需要使用计时器:

SystemTray.ProgressIndicator = new ProgressIndicator();
SystemTray.ProgressIndicator.IsVisible = true;
SystemTray.ProgressIndicator.Text = "Data is up-to-date";

DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(2000);

timer.Tick += (sender, args) =>
{
    SystemTray.ProgressIndicator.IsVisible = false;
    timer.Stop();
};

timer.Start();