2017-02-25 108 views
1

我正在創建一個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

回答

1

它看起來就像你在一個屬性/字段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在同一類中聲明

1

使用applicationdata類將狀態保存到本地磁盤。需要更多一點背景

+0

感謝您的答覆。我已更新我的答案,請檢查它@DaveSmits – Uwpbeginner

1

你最好的選擇可以是保持前一或當前狀態(取決於你如何看待它)到一個XML配置文件或應用程序數據的容器。

請參閱以下documentation以引用ApplicationDataContainer本地設置的存儲。

在應用程序啓動時,可以檢查並讀入該值以適當地聲明該變量。基本上每次用戶都會收到通知 - 在您想要更新該配置文件後立即確認已知用戶已收到通知。

+0

感謝您的回覆,但有沒有這方面的任何樣本,或者你可以給一個參考,以瞭解這一點。@ ChrisCruz – Uwpbeginner

+0

請參閱我的編輯鏈接到適用於AppData存儲使用情況的文檔。 –

+0

我試過這個,但我在哪裏初始化值,因爲無論我初始化它再次運行和值初始化爲true。 – Uwpbeginner

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"; 
}