在Uwp中只运行一次代码

问题描述:

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

尝试方法:

经典的方法:

  1. 声明一个布尔变量说计数以及初始化值为true。
  2. 当条件匹配并显示通知将计数设置为false时。因此现在通知不会再显示。

代码://在类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";      
} 

但它的问题工作正常,直到应用程序正在运行,但当应用程序关闭并重新打开价值变量e再次被初始化为真。 有没有解决方法?提前致谢。

+0

我不相信你想要设置值为“真”与构造函数,因为这将始终设置值首先。你的方式是想读取那里的价值。 –

+0

那么我应该在哪里初始化它? – Uwpbeginner

它看起来就像你在一个属性/字段declaraion初始化,所以它永远是正确的。这是我的实现,用于检查是否在给定设备上同步数据。检查是否为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在同一类中声明

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

+0

感谢您的答复。我已更新我的答案,请检查它@DaveSmits – Uwpbeginner

你最好的选择可以是保持前一或当前状态(取决于你如何看待它)到一个XML配置文件或应用程序数据的容器。

请参阅以下documentation以引用ApplicationDataContainer本地设置的存储。

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

+0

感谢您的回复,但有没有这方面的任何样本,或者你可以给一个参考,以了解这一点。@ ChrisCruz – Uwpbeginner

+0

请参阅我的编辑链接到适用于AppData存储使用情况的文档。 –

+0

我试过这个,但我在哪里初始化值,因为无论我初始化它再次运行和值初始化为true。 – Uwpbeginner

每次应用程序启动时,您都不应该初始化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"; 
}