运行 Uwp 中只有一次代码
Run a code only once in Uwp
我正在创建一个 Uwp 应用程序,我只需要在满足特定条件时向用户显示一次性通知,并且一次 only.Now 执行此操作的函数在另一个类型的项目中定义class 库 n 文件 check.cs 我在后台任务项目和另一个 uwp 类型项目中调用此函数。
尝试过的方法:
经典方法:
- 声明了一个 bool 变量 say count 并将初始化值设置为 true。
- 当条件匹配并显示通知以将计数设置为 false.So 现在通知将不会再次显示。
代码://在class 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。
有什么解决方法吗?提前致谢。
使用应用程序数据class将状态保存到本地磁盘。需要更多上下文
您最好 可能 将以前或当前的状态(取决于您如何看待它)保存到一个配置 XML 文件或 AppData 容器。
请参阅以下documentation以参考ApplicationDataContainer本地设置的存储。
应用程序启动时,可以检查并读入该值以适当地声明该变量。基本上每次用户收到通知时 - 在您想要更新该配置文件以确保已知用户已收到通知后立即。
您不应在每次应用程序启动时都在 App.xaml.cs
中初始化设置。
仅添加一次并检查设置是否确实存在于您的 Check
class:
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";
}
您似乎在 property/field 声明中对其进行了初始化,因此它始终为真。这是我检查是否在给定设备上同步数据的实现。检查是否为 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
是在同一个 class
中声明的 const string
我正在创建一个 Uwp 应用程序,我只需要在满足特定条件时向用户显示一次性通知,并且一次 only.Now 执行此操作的函数在另一个类型的项目中定义class 库 n 文件 check.cs 我在后台任务项目和另一个 uwp 类型项目中调用此函数。
尝试过的方法:
经典方法:
- 声明了一个 bool 变量 say count 并将初始化值设置为 true。
- 当条件匹配并显示通知以将计数设置为 false.So 现在通知将不会再次显示。
代码://在class 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。 有什么解决方法吗?提前致谢。
使用应用程序数据class将状态保存到本地磁盘。需要更多上下文
您最好 可能 将以前或当前的状态(取决于您如何看待它)保存到一个配置 XML 文件或 AppData 容器。
请参阅以下documentation以参考ApplicationDataContainer本地设置的存储。
应用程序启动时,可以检查并读入该值以适当地声明该变量。基本上每次用户收到通知时 - 在您想要更新该配置文件以确保已知用户已收到通知后立即。
您不应在每次应用程序启动时都在 App.xaml.cs
中初始化设置。
仅添加一次并检查设置是否确实存在于您的 Check
class:
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";
}
您似乎在 property/field 声明中对其进行了初始化,因此它始终为真。这是我检查是否在给定设备上同步数据的实现。检查是否为 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
是在同一个 class
const string