Benutzer mit den meisten Antworten
In uwp app Daten Zentral sammeln und auf unterschiedlichen Seiten Anzeigen

Frage
-
Hallo ich bin kein programmier Profi.
Ich habe eine uwp app mit visual Basic erstellt.
Die app funktioniert auch so wie sie soll, d.h. wenn ich in der app auf verbinden klicke verbindet sich die app mit einer externen Steuerung und holt die Daten, um die Daten dann anzuzeigen. Da die app nur aus einer Seite (*.xaml) besteht war das auch kein Problem. Die Daten kommen "timer" getriggert zur app.
Ich möchte jetzt die app erweitern, also mehrere Seiten hinzufügen. Jetzt passiert aber folgendes, wenn ich die Seite wechsle stoppt die Datenverbindung (timer).
Am liebsten wäre mir eine Zentrale Seite z.B. "Setup" auf der ich alles einstellen kann und dann die Verbindung aktiviere. So das ich mir dann nur noch die Daten "raus picke" die ich auf der entsprechenden Seite benötige.
Ich habe schon diverse Sachen ausprobiert, bin aber bis jetzt gescheitert. Ich vermute das ein "Background Task" die richtige Lösung ist. Allerdings ist es mir trotz der vielen Beispiele nicht gelungen ein "Background Task" zu starten/registrieren.
Vielleicht kann mir ja jemand Lösungsansätze zeigen.
Vielen Dank
Andreas
Antworten
-
Hallo Andreas,
ein BackgroundTask bringt dir nur dann etwas, wenn du im Hintergrund etwas herunter laden willst. Deiner Beschreibung nach hast du bisher im Codebehind deiner Seite einfach einen Timer platziert. Sobald du nun von der Seite weg navigierst, wird die Seite vom GC weg geräumt und auch der Timer geht damit verloren.
Um das abzuändern müsstest du etwas erstellen, dass dir die Daten bereit stellt. Am besten als eigene Klasse. Diese kann dann den Timer enthalten und die Daten bereit stellen. Die Klasse kann auch ein eigenes Event anbieten, über welches "Zuhörer" wie die Pages über neue Informationen informiert werden.
Wichtig ist dabei, dass du entweder immer die selbe Instanz weiter gibst (also insgesamt nur einmal mit New eine neue Instanz erzeugst) oder aber du machst alles Statisch (Shared Schlüsselwort in VB) um so nur einen Timer zu haben.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 19. Dezember 2016 07:54
- Als Antwort markiert Stefan FalzModerator Dienstag, 20. Dezember 2016 17:04
-
Hi Andreas,
dein "Public Klasse As New Class1()" solltest Du in einem Modul einbauen. Damit wird die Instanzvariable (Klasse) statisch und kann von überall über Modulname.Klasse angesprochen werden. Damit hast Du nur eine Instanz Deiner Klasse.
--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks- Bearbeitet Peter Fleischer Samstag, 7. Januar 2017 13:54
- Als Antwort markiert Andreas_M_ Samstag, 7. Januar 2017 14:24
Alle Antworten
-
Hallo Andreas,
ein BackgroundTask bringt dir nur dann etwas, wenn du im Hintergrund etwas herunter laden willst. Deiner Beschreibung nach hast du bisher im Codebehind deiner Seite einfach einen Timer platziert. Sobald du nun von der Seite weg navigierst, wird die Seite vom GC weg geräumt und auch der Timer geht damit verloren.
Um das abzuändern müsstest du etwas erstellen, dass dir die Daten bereit stellt. Am besten als eigene Klasse. Diese kann dann den Timer enthalten und die Daten bereit stellen. Die Klasse kann auch ein eigenes Event anbieten, über welches "Zuhörer" wie die Pages über neue Informationen informiert werden.
Wichtig ist dabei, dass du entweder immer die selbe Instanz weiter gibst (also insgesamt nur einmal mit New eine neue Instanz erzeugst) oder aber du machst alles Statisch (Shared Schlüsselwort in VB) um so nur einen Timer zu haben.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 19. Dezember 2016 07:54
- Als Antwort markiert Stefan FalzModerator Dienstag, 20. Dezember 2016 17:04
-
Hallo Tom,
vielen Dank für deine Antwort. Jetzt weiß ich auf jeden Fall das ich Tage lang in die falsche Richtung gearbeitet habe.
Ja du hast recht bei der ersten app gab es nur eine Seite und ich habe alles im Codebehind abgearbeitet.
Leider ist deine Antwort zu allgemein. Ich habe schon mal mit einer Klasse gearbeitet, allerdings nur als "Variablenspeicher". Wie kann ich denn eine Klasse permanent aufrufen (Seitenunabhängig).
Wie gesagt das ist alles Neuland für mich. Ich habe auch schon nach Büchern gesucht, aber die Bücher die es gibt behandeln Windows Form Programme. Wenn man Bücher für app (uwp) Programmierung sucht wird es schon weniger. Und wenn es dann noch VB sein soll ist es ganz aus.
Vielleicht kannst du mir noch ein paar Stichwörter geben, so das ich dann mit einer Suchmaschine weiter komme.
Vielen Dank
Andreas
-
Hallo Andreas,
das wichtigste beim Programmieren ist die Sprache. Und die funktioniert weitestgehend unabhängig von der UI. Wenn es schon an so etwas wie einer Klasse scheitert, empfehle ich dir dich erstmal mit den Grundlagen auseinander zu setzen. Dafür gibts auch kostenlose Bücher im Internet, beispielsweise Einstieg in Visual Basic 2012 Auch wenn die meistens erstmal andere Technologien behandeln, so wirst du schnell merken, dass das wichtigste unabhängig davon funktioniert. Speziell OOP und derartige Dinge. In dem verlinkten Buch sollten speziell die Kapitel 2-5 das wichtigste enthalten.
Leider ist deine Antwort zu allgemein
Noch spezifischer machen kann ich es eigentlich nur, indem ich dir den Code gebe. Aber das wird keinem von uns etwas bringen.
Wenn du spezielle Implementierungsprobleme hast, dann kann ich dir damit weiter helfen.Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets -
Hallo Tom,
ich wünsche ein frohes neues Jahr. Ich habe jetzt das online Buch gelesen und div. Videotutorials angesehen. Leider komme ich noch nicht ans Ziel.
Ich habe jetzt folgende Klasse erstellt:
class1.vb
Public Class Class1 Public zahl As Integer Private bool As Boolean Dim timer As DispatcherTimer Public Sub New() timer = New DispatcherTimer() timer.Interval = TimeSpan.FromMilliseconds(1000) AddHandler timer.Tick, AddressOf Timer_Tick timer.Start() End Sub Public Sub Freigabe(ByVal var As Boolean) bool = var End Sub Private Sub Timer_Tick(sender As Object, e As Object) If bool = True Then zahl += 1 Debug.WriteLine("***") Debug.WriteLine(zahl) Debug.WriteLine("***") Else Debug.WriteLine("***") Debug.WriteLine("nicht freigegeben") Debug.WriteLine("***") End If End Sub End Class
Dann habe ich ein Objekt der Klasse in folgender Datei "BlankPage2.xaml.vb" erzeugt.
BlankPage2.xaml.vb
' Die Elementvorlage "Leere Seite" ist unter http://go.microsoft.com/fwlink/?LinkId=234238 dokumentiert. ''' <summary> ''' Eine leere Seite, die eigenständig verwendet oder zu der innerhalb eines Rahmens navigiert werden kann. ''' </summary> Public NotInheritable Class BlankPage2 Inherits Page Private Klasse As New Class1 Public Sub New() InitializeComponent() End Sub Private Sub button_Click(sender As Object, e As RoutedEventArgs) Handles button.Click Klasse.Freigabe(1) End Sub Private Sub button1_Click(sender As Object, e As RoutedEventArgs) Handles button1.Click Klasse.Freigabe(0) End Sub End Class
Jetzt wird aber jedes mal ein Objekt erzeugt wenn ich die Seite verlasse und wieder aufrufe.
Wenn ich jetzt in der "app.xaml.vb" ein Objekt der Klasse erzeuge, kann ich von der/den Seiten nicht mehr darauf zugreifen.
app.xaml.vb
NotInheritable Class App Inherits Application Public Klasse As New Class1()
In den Büchern wird bei den Beispielen nur von einer Seite/Form ausgegangen die dann auch nicht verlassen wird. Nur wie mache ich das dann bei mehreren Seiten?
Vielen Dank
Andreas
-
Hi Andreas,
dein "Public Klasse As New Class1()" solltest Du in einem Modul einbauen. Damit wird die Instanzvariable (Klasse) statisch und kann von überall über Modulname.Klasse angesprochen werden. Damit hast Du nur eine Instanz Deiner Klasse.
--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks- Bearbeitet Peter Fleischer Samstag, 7. Januar 2017 13:54
- Als Antwort markiert Andreas_M_ Samstag, 7. Januar 2017 14:24