在Uwp中只运行一次代码

时间:2017-02-25 21:54:13

标签: c# uwp win-universal-app

我正在创建一个Uwp应用程序,我只需要向用户显示一次性通知,如果某个条件匹配且只有一次。现在这个函数是在类库类型n的另一个项目中定义的文件check.cs我在后台任务项目和另一个uwp类型项目中调用此函数。

尝试方法:

经典方法:

  1. 声明一个bool变量,将count和initialized value声明为true。
  2. 当条件匹配并显示通知以将计数设置为false时。现在通知将不再显示。
  3. 代码://在类check.cs中

    var one = true;
    public static async Task Onetime()
    {
        if (x == 2 && one)
        {
            PopToast("Only once");
            one = false;
        }
    }
    

    app.xaml.cs构造函数中的代码:

    var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
    localSettings.Values["one"] = "true";      
    

    代码内部功能:

    var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
    string value = localSettings.Values["one"].ToString();
    if(x==2 && value=="true")
    {                            
        PopToast("Only once");
        localSettings.Values["one"] = "false";                       
    }
    

    但是这个问题在应用程序运行之前工作正常但是当应用程序关闭并再次打开时,变量的值再次初始化为true。 有没有解决方法?提前谢谢。

4 个答案:

答案 0 :(得分:1)

使用applicationdata类将状态保存到本地磁盘。需要更多的背景

答案 1 :(得分:1)

你最好的选择可以将先前或当前状态(取决于你如何看待它)保存到配置XML文件或AppData容器中。

请参阅以下documentation以获取ApplicationDataContainer本地设置存储的参考。

启动应用程序后,可以检查并读入该值以适当地声明该变量。基本上每次通知用户时 - 在您想要更新该配置文件之后立即确保已知用户已被通知。

答案 2 :(得分:1)

每次应用程序启动时,您都不应该在App.xaml.cs中初始化设置。

只添加一次并检查Check类中的设置是否实际存在:

const string key = "one";
var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
if (x == 2 && !localSettings.Values.ContainsKey(key))
{
    PopToast("Only once");
    localSettings.Values[key] = "false";
}

答案 3 :(得分:1)

看起来你在属性/字段声明中初始化它,所以它总是如此。这是我的实现,用于检查是否在给定设备上同步数据。检查为null(在第一个应用程序运行时),如果是,则将其初始化为应该是什么,然后相应地设置应用程序数据。如果没有,则检索当前数据并相应地设置本地应用程序信息。我当然不是专业人士,但这似乎完全符合预期。

object onedrive = localsettings.Values[_dataSyncSetting];
        if (onedrive == null)
        {
            localsettings.Values[_dataSyncSetting] = true;
            _isDataSyncEnabled = true;
            _dataPolicy = _dataSync;
        }
        else
        {
            _isDataSyncEnabled = (Boolean)onedrive;
            _dataPolicy = _isDataSyncEnabled ? _dataSync : _dataLocal;
        }

编辑; _dataSyncSetting是在同一个类中声明的const string