2017-02-25 26 views
1

Ich erstelle eine Uwp-App, wo ich nur den Benutzer eine einmalige Benachrichtigung anzeigen muss, wenn eine bestimmte Bedingung nur einmal und einmal übereinstimmt.Jetzt ist die Funktion, die dies in einem anderen definiert Projekt vom Typ Klassenbibliothek n der Datei check.cs und ich rufe diese Funktion in einem Hintergrund-Task-Projekt und in einem anderen uwp-Typ-Projekt.Führen Sie einen Code nur einmal in Uwp

Versuchte Methode:

klassischer Ansatz:

  1. eine Bool Variable erklärt sagen zählen und Wert auf true initialisiert.
  2. Wenn die Bedingung übereinstimmt und eine Benachrichtigung angezeigt wird, um die Anzahl auf "Falsch" zu setzen. Jetzt wird die Benachrichtigung nicht mehr angezeigt.

Code: // In der Klasse check.cs

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

-Code in App.xaml.cs Konstruktor:

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

Code in Funktion:

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

Aber Das Problem funktioniert gut bis App läuft, aber wenn die App geschlossen und der Wert wieder geöffnet wird e der Variable wird wieder auf wahr initialisiert. Gibt es einen Workaround? Vielen Dank im Voraus.

+0

Ich glaube nicht, dass Sie den Wert auf "wahr" mit dem Konstruktor setzen möchten, da dies immer den Wert zuerst einstellen wird. Du willst stattdessen den Wert dort einlesen. –

+0

Wo sollte ich es initialisieren? – Uwpbeginner

Antwort

1

Es sieht aus wie Sie es in einem Objekt/Feld declaraion sind initialisiert, so wird es immer wahr sein. Hier ist meine Implementierung, um zu überprüfen, ob Daten auf dem gegebenen Gerät synchronisiert werden sollen. Prüft auf Null (beim ersten App-Lauf), falls ja, initialisiere es auf das, was es sein soll, und setze dann die App-Daten entsprechend. Ist dies nicht der Fall, werden die aktuellen Daten abgerufen und die lokalen App-Informationen entsprechend festgelegt. Ich bin sicherlich kein Profi, aber das scheint genau so zu funktionieren wie beabsichtigt.

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

Bearbeiten; _dataSyncSetting ist ein const string deklariert in der gleichen Klasse

1

Speichern Sie den Status auf lokaler Festplatte mit der Klasse applicationdata. brauchen etwas mehr Kontext

+0

Vielen Dank für Ihre Antwort.Ich habe meine Antwort aktualisiert bitte überprüfen Sie es @DaveSmits – Uwpbeginner

1

Sie am besten sind Wette sein kann, den früheren oder aktuellen Zustand (je nachdem wie man es betrachtet) in einer Config-XML-Datei oder AppData Behälter zu halten.

Bitte beachten Sie die folgenden documentation für einen Verweis auf den lokalen Speicher der Anwendung ApplicationDataContainer.

Beim Start der Anwendung kann der Wert überprüft und eingelesen werden, um diese Variable entsprechend zu deklarieren. Im Wesentlichen jedes Mal, wenn der Benutzer benachrichtigt wird - unmittelbar nachdem Sie diese Konfigurationsdatei aktualisieren möchten, um sicherzustellen, dass bekannt ist, dass der Benutzer bereits benachrichtigt wurde.

+0

Vielen Dank für Ihre Antwort, aber gibt es ein Beispiel dafür oder können Sie einen Verweis geben, um dies zu verstehen. @ ChrisCruz – Uwpbeginner

+0

Bitte beachten Sie meine Bearbeitung für einen Link zu der geeignete Dokumentation für die Verwendung von AppData-Speichern. –

+0

Ich habe das versucht, aber wo initialisiere ich den Wert, denn wo immer ich initialisiert habe, läuft es wieder und Wert wird auf True initialisiert. – Uwpbeginner

1

Sie sollten die Einstellung in App.xaml.cs nicht bei jedem Start der Anwendung initialisieren.

es Fügen Sie nur einmal und prüfen Sie, ob die Einstellung in Ihrer Check Klasse existiert tatsächlich:

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