vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Frage zu Datenaustausch 
Autor: Bazi
Datum: 28.06.17 13:59

Hallo,
in meinem aktuellen Programm benötige ich eine Möglichkeit des Datenaustausches zwischen verschiedenen Geräten.
Die Geräte sind in der Regel bei der Datenerfassung offline. Datenspeicherung ist derzeit noch in einer xml-Datei, es ist aber vorgesehen auf eine SQLight Datenbank zu wechseln.

Ich kann bei keinem der Geräte sicherstellen dass ein anderes online ist. Daher müsste der Austausch meiner Meinung nach über eine Cloud laufen?
Wie würdet Ihr den Datenabgleich realisieren?

Gruß Christian

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Frage zu Datenaustausch 
Autor: effeff
Datum: 28.06.17 15:48

Da reicht eine Datenbank im Internet; Sobald irgendeine Maschine online ist, versorgt sie sich dort mit den Daten.

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Frage zu Datenaustausch 
Autor: Blackbox
Datum: 28.06.17 17:09

Hi,
meintest Du SQLITE?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Frage zu Datenaustausch 
Autor: Bazi
Datum: 28.06.17 20:04

DB im Internet kann ich nicht sicherstellen. Habe keinen Server wo ich darauf zugreifen kann.

Das Programm ist derzeit so aufgebaut dass ein Rechner die Serverfunktion übernehmen soll. An diesem registrieren sich die anderen Rechner. Der "Server" soll alle Daten von seinen angemeldeten Rechnern erhalten und verarbeiten, dann entsprechend auf die anderen Rechner weiter verteilen.

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Frage zu Datenaustausch 
Autor: Bazi
Datum: 28.06.17 20:04

ja, hab mich wohl verschrieben. Sorry.

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Frage zu Datenaustausch 
Autor: Franki
Datum: 29.06.17 03:32

Hallo,

beschreibe doch mal etwas genauer wie bzw. wann der Datanaustausch zwichen den Geräten stattfinden soll oder kann.

Eine Cloud funktioniert ja auch nur dann wenn die Geräte ihre Daten dort hin übertragen können. Wenn sie offline sind geht gar nichts.

Also wie können sie sich austauschen? Das kann eine Cloud sein, ein Webserver im Internet aber auch ein lokaler Rechner im Intranet oder soger HomeOffice Netzwerk. Oder auch Austasch per E-Mail mit Dateianhang usw. wäre machbar.

Um was für Geräte handelt es sich bei dir? (ich vermute mal MDE oder so was) und wann sind diese denn erreichbar für eine Datenaustausch?
Deine Geräte erfassen wahrscheinlich lokal ihre Daten und müssen sie irgendwann synchronisieren.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Frage zu Datenaustausch 
Autor: Schudi
Datum: 30.06.17 09:01

Hmmm...

Du schreibst:
Zitat:

Ich kann bei keinem der Geräte sicherstellen dass ein anderes online ist.


Aber Du schreibst auch:
Zitat:

Das Programm ist derzeit so aufgebaut dass ein Rechner die Serverfunktion übernehmen soll. An diesem registrieren sich die anderen Rechner. Der "Server" soll alle Daten von seinen angemeldeten Rechnern erhalten und verarbeiten, dann entsprechend auf die anderen Rechner weiter verteilen.


Kannst Du denn wenigstens sicher stellen dass der Rechner der Server "spielen" soll immer eingeschaltet und erreichbar ist?

Befinden sich alle teilnehmenden Rechner in einem lokalen Netzwerk? Andernfalls könnte die Erreichbarkeit des Servers ja schon durch Ausfall des Internetzugangs gefährdet sein.


Ich würde das vermutlich so lösen, dass ich die Daten grundsätzlich zuerst in eine lokale Datenbank speichere. Dann würde ich prüfen, ob die zentrale Datenbank erreichbar ist und die Daten ggf. dorthin übertragen.

Es ist ja auch die Frage ob die zentrale Datenbank für die Lauffähigkeit Deiner Anwendung zwingend vorhanden und im Zugriff sein muss? Werden Daten aus dieser Datenbank zur Ausführung der Anwendung benötigt?

In welcher Beziehung stehen die Daten der einzelnen Plätze zueinander? Muss Platz A wissen, was Platz B aktuell macht?

Du schreibst ja, dass der Server die Daten, nachdem er sie empfangen hat, an alle anderen Plätze weiter leiten soll. Wie zeitnah muss dies passieren? Und wenn Du nie sicher sein kannst, dass ein Platz aktiv ist, wie soll der Server die Daten dann an die Plätze verteilen, also auf deren Datenbank zugreifen? Besser wäre es wohl wenn ein Platz sich beim Start der Anwendung die Daten selber "holt".

Wie immer - viele Fragen, die man erst klären muss...

Beitrag wurde zuletzt am 30.06.17 um 09:06:00 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Frage zu Datenaustausch 
Autor: Bazi
Datum: 30.06.17 11:04

Hallo,
wir haben verschiedene mobile Geräte (Laptop, Tablets) auf denen Daten erfasst werden.
Die Geräte sind bei der Datenerfassung offline, es gibt keinen zentralen Rechner der ständig an ist und als Server fungiert.
Bei den mobilen Geräten ist ausgehandelt welches als Server für das jeweilige Projekt dient. Kriterium habe ich die MAC-Adresse festgelegt.

Die Geräte haben alle irgendwann Internet-Verbindung. Ich kann aber nicht sicherstellen dass zu bestimmten Zeiten bestimmte Geräte online sind. Daher bin ich der Ansicht dass der Datenabgleich über die Wolke erfolgen müsste.
Webserver kann ich nicht stellen, lokaler Rechner ist nicht vorhanden.
Mailanhang ginge, aber da finde ich die Wolke performanter.

Mein derzeitiger Gedanke geht in Richtung Austausch via xml-Dateien. MAC-Adresse des jeweiligen Empfängers im Dateinamen.

Die Frage war ob es für diesen Fall evtl. noch andere Austauschmöglichkeiten gibt die ich evtl. nicht kenne.

Gruß Christian

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Frage zu Datenaustausch 
Autor: Manfred X
Datum: 30.06.17 15:28

Hallo!

Hast Du Dir Gedanken über ein Regelsystem für die User gemacht,
aus dem hervorgeht, in welchen Intervallen und bis zu welchen Schlüssel-
Zeitpunkten die Cloud-DB durch die lokalen Geräte jeweils aktualisiert
zu werden hat???

Schudi hat ja bereits darauf aufmerksam gemacht, daß Du Dich eventuell
mit einer Fülle von Koordinierungsproblemen "en Detail" auseinandersetzen
mußt.

Beitrag wurde zuletzt am 30.06.17 um 15:32:02 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Frage zu Datenaustausch 
Autor: Bazi
Datum: 30.06.17 20:16

Zeitnah muss das nicht passieren.
Es geht darum dass mit verschiedenen Geräten Begehungen auf Baustellen gemacht werden. Die Begehungen werden unter anderem von externen Mitarbeitern gemacht, die die Tablets mit nach hause nehmen.
Die Funktion des Servers spielt derzeit mein Laptop. Datenaustausch ist via einzelne Textdateien und Dropbox. Werde ich aber dieses WE auf xml und Dropbox umstellen. Bei einzelnen Textdateien ist mir die Anzahl der Dateien zu groß. Jeder Datensatz jeder Tabelle eine Datei, und Bilder und Pläne nochmal separat dazu. Da kommt schon was zusammen.

Momentan ist es so geregelt:

Ein neues Tablet schreibt eine Textdatei mit Anmeldeinformationen in einen dafür ausgehandelten Ordner in der Dropbox. Das kann z.B. Abends um 22:00 Uhr sein.
Irgendwann liest mein Laptop diese Textdatei und bei mir poppt ein Fenster auf wo ich den sendenden Tablet als Client für ein Projekt (oder mehrere) eintrage.
Daraufhin werden für den Tablet nötige Informationen in die Dropbox in besagtes Verzeichnis gelegt.

Irgendwann liest der Tablet die Dateien ein und hat die Daten drauf.

Im Namen der Austauschdateien ist immer die MAC-Adresse des Empfängers drin. Danach werden die Daten beim lesen des Verzeichnisses gefiltert. Mir ist klar dass falls ein Gerät seine MAC ändert dieser keine Daten mehr erhält.
Da beim Datenaustausch jeder Rechner nur die für ihn bestimmten Dateien liest gehe ich davon aus dass ich keine Konflikte bekomme.

Es gibt Situationen wo alle Rechner im gleichen WLan sind, aber nicht in der gleichen Netzwerkgruppe. Also keine direkte Verbindung untereinander.

Meinen Laptop nehme ich nach der Arbeit mit heim. Sollte ich ihn dort einschalten so möchte ich die Daten die von den Tablets über den Tag erstellt wurden einlesen.

Sollte das Internet ausfallen geht nichts mehr, das ist mir klar. Datensicherheit spielt auch keine Rolle, sollte irgend jemand anderés die Dateien mitlesen können wäre das egal.

Blöd ist dass recht viele Bilder dabei sind. Die schreibe ich derzeit in Byte() und in Textdateien, auf der anderen Seite setze ich die wieder zusammen und speichere die im Dateisystem ab.

Datenhaltung ist ein Typisiertes Dataset, Speicherung derzeit noch in xml. Werde ich aber wie schon geschrieben umstellen auf DB.

Die Austauschdateien für neue oder geänderte Daten werden immer beim Speichern geschrieben, das bremst etwas. Trotz neuem Thread. Die Tablets haben auch nur 2GB Arbeitsspeicher.

Die Zeitspanne des Datenaustausches ist unkritisch. Wenn es 1/2 Stunde dauert wäre das auch OK.

Momentan in der Testphase geht es sogar schneller als erwartet.

Je länger wir darüber schreiben um so mehr bin ich der Meinung dass es für diesen Anwendungsfall der richtige Weg ist.

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Frage zu Datenaustausch 
Autor: Schudi
Datum: 01.07.17 07:05

Ich finde Deine Lösung schon beim ersten Lesen - sagen wir - suboptimal. Warum:

a) Die ganze Lösung ist davon abhängig dass Du fit bist und Deinen Laptop manuell einschaltest und den Transfer auslöst.

Fällst Du aus, was wir nicht hoffen wollen, ist die komplette Lösung nicht einsatzfähig.

- Was ist wenn Du Urlaub hast und unter Palmen in der Sonne liegst? Hast Du Dein Laptop dann dabei?
- Was ist wenn Du wegen Krankheit zeitweise oder - Gott möge es verhüten - urplötzlich ganz ausfällst?

Zitat:

Meinen Laptop nehme ich nach der Arbeit mit heim. Sollte ich ihn dort einschalten so möchte ich die Daten die von den Tablets über den Tag erstellt wurden einlesen.


Bei dem Wort "sollte" sträuben sich mir die Nackenhaare. Wenn Du nicht möchtest, dann bekommt also keiner der externen Tablets mehr Daten geliefert, da Du den Vorgang ja manuell anstoßen musst. So etwas geht, wenn ich das jetzt mal aus Sicht Deines Auftraggebers betrachte, gar nicht.


b) Bazi schrieb:
Zitat:

Mir ist klar dass falls ein Gerät seine MAC ändert dieser keine Daten mehr erhält.


Ok, ein Gerät ändert seine Mac-Adresse im Normalfall nie, es sei denn Du wechselst die Netzwerkkarte. Aber was passiert wenn ein Tablet ausfällt und der Mitarbeiter ein neues bekommt? Kommt der dann nicht mehr an seine bisherigen Daten ran? Deine Aussage ist jedenfalls genau das, denn neues Tablet = neue Mac-Adresse.

Also für mich klingt das alles - sorry - wenig professionell und vor Allem wenig ausfallsicher.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Frage zu Datenaustausch 
Autor: Bazi
Datum: 01.07.17 20:39

Die Einwände sind natürlich berechtigt.
Ich könnte es so regeln dass jedes Gerät die MAC-Adressen aller anderen Geräte für das entsprechende Projekt erhält, und neue oder geänderte Daten an alle sendet.
Dann wäre nur noch das Thema mit einem neu aufzunehmenden Gerät am "Serverrechner" ungelöst.

Das wäre aber auch bei einer online-DB das gleiche. Wenn der Admin aus welchem Grund auch immer ein neues Gerät nicht bestätigen kann, erhält das keine Daten.
Wäre der "Server" nun eine Rechner z.B. im Baucontainer, könnte man eine Vertretungsregelung finden. So lange das aber auf meinem Laptop passiert, fällt mit mir auch die Neuanmeldung von Geräten.

Alternative wäre dass jedes Gerät neue hinzufügen kann, das finde ich aber auch nicht gut.

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Frage zu Datenaustausch 
Autor: Manfred X
Datum: 01.07.17 22:44

Hallo!

Deine Datenpakete bestehen aus vielen Bildern, Plänen usw.?
Das scheinen jeweils recht umfangreiche Byte-Mengen zu sein.
Die würde ich nicht in eine Datenbank eintragen.

Wäre es nicht einfacher, wenn für jedes Tablet oder jede
Usergroup eine Internet-Seite (File-Hoster) eingerichtet wird,
wo die erfaßten Datenpakete als Dateiserie abgelegt werden können.
Einzelne Texte könnten in einer Textdatei zusammengefaßt werden.

Zusätzlich kann ein Hintergrund-Programm regelmäßig diese Datenpakete
einsammeln, prüfen und sie ggf. bedarfsgerecht neu verteilt/aufbereitet
zum Download anbieten.

Aber vielleicht habe ich nicht verstanden, was Du erreichen möchtest?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Frage zu Datenaustausch 
Autor: Bazi
Datum: 01.07.17 22:50

Hallo,
ja, in den Datenpaketen sind viele Bilder und PDF-Pläne.
Die speichere ich jedoch nicht (mehr) in der xml bzw. DB, sondern im Dateisystem. Das hatte ich bereits umgestellt. Lediglich zur Übertragung hatte ich sie noch als Byte() umgewandelt, aber auch das schreibe ich gerade um.

Die Variante mit File-Hoster ist doch in etwa die gleiche wie das was ich mit Dropbox mache.
Mit File-Hoster kenne ich mich halt nicht aus.

Danke für die Hilfe

Gruß Christian

Beitrag wurde zuletzt am 01.07.17 um 22:57:31 editiert.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Frage zu Datenaustausch 
Autor: Manfred X
Datum: 01.07.17 23:04

Datenbanken sind in erster Linie dafür konzipiert, überschaubare
Datenmengen in Tabellen-Feldern aufzubewahren, die auf mehr oder
weniger komplexe Weise relational miteinander verknüpft werden.
Zur Archivierung voluminöser Datenbestände (z.b. als Blobs) sind
sie weniger geeignet.

Man kann den Inhalt von Dateiserien in Instanzen einer serialisierbaren
Datenklasse eintragen, deren Member dynamische Listen von String-Variablen,
JPG-Streams usw. sind.
Auf diese Weise entsteht ein speicherbares Datenpaket, das schnelles
Laden/Speichern und strukturierten Zugriff auf die einzelnen Daten-Elemente
ermöglicht.

Beitrag wurde zuletzt am 01.07.17 um 23:27:39 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Frage zu Datenaustausch 
Autor: Bazi
Datum: 02.07.17 09:46

Dieser Abschnitt hört sich interessant an:

Zitat:

Man kann den Inhalt von Dateiserien in Instanzen einer serialisierbaren
Datenklasse eintragen, deren Member dynamische Listen von String-Variablen,
JPG-Streams usw. sind.
Auf diese Weise entsteht ein speicherbares Datenpaket, das schnelles
Laden/Speichern und strukturierten Zugriff auf die einzelnen Daten-Elemente
ermöglicht.


Wäre das eine Alternative statt die Bilder einzeln im Dateisystem zu speichern?

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Teil1: Serialisierbare Klasse für Bilderliste (JPEGs) 
Autor: Manfred X
Datum: 02.07.17 12:23

Beispiel für eine serialisierbare Klasse,
die die JPEGs im übergebenen Ordner (komprimiert) zusammenfaßt und
sie als Bitmaps zur Verfügung stellt

<Serializable()> _
Public Class PicList
 
    Dim _folder As String
    Dim pics As New List(Of Pic)
 
    Public Sub New(ByVal JPEG_Folder As String)
        Dim jpgs() As String = IO.Directory.GetFiles(JPEG_Folder, "*.jpg")
        For i As Integer = 0 To jpgs.Length - 1
            pics.Add(New Pic(jpgs(i)))
        Next i
        _folder = JPEG_Folder
    End Sub
 
    Public ReadOnly Property Count As Integer
        Get
            Return pics.Count
        End Get
    End Property
 
    Public ReadOnly Property Folder As String
        Get
            Return _folder
        End Get
    End Property
 
    Public ReadOnly Property GetPic(ByVal index As Integer) As Pic
        Get
            Return pics(index)
        End Get
    End Property
End Class
 
 
<Serializable()> _
Public Class Pic
 
    Private _bytes() As Byte
    Private _ms As IO.MemoryStream
 
    Public Property name As String
    Public Property created As Date
 
    Public ReadOnly Property Value As Bitmap
        Get
            If Not _ms Is Nothing Then _ms.Close()
 
            _ms = New IO.MemoryStream(_bytes)
            Return New Bitmap(_ms)
        End Get
    End Property
 
    Public Sub New(ByVal JPEG_File As String)
        _bytes = IO.File.ReadAllBytes(JPEG_File)
        name = IO.Path.GetFileName(JPEG_File)
        created = New IO.FileInfo(JPEG_File).CreationTime
    End Sub
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Teil2: Anwendungsbeispiel 
Autor: Manfred X
Datum: 02.07.17 12:26

Das Formular kann JPEGs in einem Ordner zusammenfassen,
anzeigen und sie als Liste serialisieren und deserialisieren
 
Public Class frmPicSerialize
 
    'Instanz der serialisierbaren Datenklasse
    Dim pl As PicList
 
    Dim fmt As New System.Runtime.Serialization. _
       Formatters.Binary.BinaryFormatter
 
    'Auswahl der gelisteten Bilder
    Dim WithEvents cbo_picnames As New ComboBox With _
        {.Parent = Me, .DropDownStyle = ComboBoxStyle.DropDownList, _
         .Width = 400, .Top = 40}
 
    'Anzeige eines gewählten Bildes
    Dim pb As New PictureBox With _
        {.Parent = Me, .Width = 400, .Height = 400, .Top = 80, _
         .SizeMode = PictureBoxSizeMode.Zoom}
 
    'Auswahl des Ordners, dessen JPEGs gelistet werden
    Dim fbd As New FolderBrowserDialog With _
        {.Description = "Ordner mit JPEG-Dateien"}
 
    Dim WithEvents btnLoad As New Button With _
        {.Parent = Me, .Text = "JPEGs in eine PicList laden", .Width = 400}
 
    'Speichern der Bilderliste
    Dim WithEvents btnSerialize As New Button With _
        {.Parent = Me, .Text = "Serialize PicList", _
         .Width = 400, .Top = 500, .Enabled = False}
 
    'Laden einer serialisierten Bilderliste
    Dim WithEvents btnDeSerialize As New Button With _
        {.Parent = Me, .Text = "DeSerialize PicList", _
         .Width = 400, .Top = 530}
 
    Dim ofd As New OpenFileDialog With {.Title = "Laden einer PicList", _
                                        .CheckFileExists = True}
    Dim sfd As New SaveFileDialog With {.Title = "Speichern einer Piclist", _
                                        .OverwritePrompt = True}
 
 
    Private Sub PicSerialize_Load(sender As System.Object, _
        e As System.EventArgs) Handles MyBase.Load
        Me.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedDialog
        Me.Size = New Size(420, 600)
    End Sub
 
 
    Private Sub cbo_picnames_SelectedIndexChanged _
        (sender As Object, e As System.EventArgs) _
        Handles cbo_picnames.SelectedIndexChanged
 
        pb.Image = pl.GetPic(cbo_picnames.SelectedIndex).Value
    End Sub
 
 
    Private Sub btnLoad_Click(sender As Object, _
            e As System.EventArgs) Handles btnLoad.Click
 
        If fbd.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub
 
        PrepareForm()
 
        'Hintergrund-Thread zum Laden der JPEGs aus einem Ordner
        Dim lds As New Threading.ThreadStart(AddressOf loadpics)
        Dim ld As New Threading.Thread(lds)
        ld.Start()
    End Sub
 
 
    Private Sub loadpics()
        pl = New PicList(fbd.SelectedPath)
        Me.Invoke(New MethodInvoker(AddressOf shownames))
    End Sub
 
    Private Sub PrepareForm()
        Me.Text = "Bilder werden geladen"
        cbo_picnames.Items.Clear()
        pb.Image = Nothing
    End Sub
 
    Private Sub shownames()
 
        cbo_picnames.Items.Clear()
        For i As Integer = 0 To pl.Count - 1
            cbo_picnames.Items.Add(pl.GetPic(i).name)
        Next i
 
        btnSerialize.Enabled = pl.Count > 0
        Me.Text = pl.Count.ToString & " Bilder aus " _
            & pl.Folder & " geladen"
        cbo_picnames.SelectedIndex = 0
    End Sub
 
 
    Private Sub btnSerialize_Click(sender As Object, _
        e As System.EventArgs) Handles btnSerialize.Click
 
        If sfd.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub
        IO.File.Delete(sfd.FileName)
        Using fs As New IO.FileStream _
            (sfd.FileName, IO.FileMode.Create, IO.FileAccess.Write)
 
            fmt.Serialize(fs, pl)
        End Using
    End Sub
 
 
    Private Sub btnDeSerialize_Click(sender As Object, _
        e As System.EventArgs) Handles btnDeSerialize.Click
        If ofd.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub
 
        PrepareForm()
 
        Using fs As New IO.FileStream _
            (ofd.FileName, IO.FileMode.Open, IO.FileAccess.Read)
 
            pl = DirectCast(fmt.Deserialize(fs), PicList)
            shownames()
        End Using
    End Sub
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Teil2: Anwendungsbeispiel 
Autor: Bazi
Datum: 02.07.17 14:03

Das ist gut. Danke
Kann es zwar noch nicht ausprobieren, weil ich wg. Sicherung nicht auf die Projekte zugreifen kann, aber im Code soweit verstanden.

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Ergänzender Hinweis 
Autor: Manfred X
Datum: 02.07.17 21:35

Um bei einer Vielzahl von Zugriffen auf die
Bilderliste ein Speicherleck zu vermeiden, sollte
die jeweils aus der Liste abgefragte/erstellte Bitmap
nach dem Gebrauch "disposed" werden.

Sei pl die Bilderliste ...
Private Sub Slideshow()
   Dim bmp As Bitmap = Nothing
 
   For i As Integer = 0 To pl.Count - 1
 
       If Not bmp Is Nothing Then bmp.Dispose()
 
       bmp = pl.GetPic(i).Value
       pb.Image = bmp
 
       Me.Text = i.ToString & pl.GetPic(i).name
       Me.Refresh()
       Threading.Thread.Sleep(2000)
   Next i
End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Ergänzender Hinweis 
Autor: Bazi
Datum: 02.07.17 22:09

OK, warum die lange Wartezeit beim Sleep?

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Ergänzender Hinweis 
Autor: Manfred X
Datum: 02.07.17 22:28

Weil es ein Beispiel für eine Slideshow ist.
Dadurch werden die Bilder kurz angezeigt.

Ordentliche Menschen implementieren Freigabe-Methoden in
ihren Klassen, z.B. so ...
Public Class Pic
    Implements IDisposable
 
    Private _bytes() As Byte
    Private _ms As IO.MemoryStream
    Private _bp As Bitmap
 
    Public Property name As String
    Public Property created As Date
 
    Public ReadOnly Property Value As Bitmap
        Get
            Free()
            _ms = New IO.MemoryStream(_bytes)
            _bp = New Bitmap(_ms)
            Return _bp
        End Get
    End Property
 
    Public Sub New(ByVal JPEG_File As String)
        _bytes = IO.File.ReadAllBytes(JPEG_File)
        name = IO.Path.GetFileName(JPEG_File)
        created = New IO.FileInfo(JPEG_File).CreationTime
    End Sub
 
#Region "IDisposable Support"
 
    Public Sub Free()
        If Not _ms Is Nothing Then _ms.Close() ': _ms = Nothing
        If Not _bp Is Nothing Then _bp.Dispose() ': _bp = Nothing
    End Sub
 
    Private disposedValue As Boolean
    Protected Overridable Sub Dispose(disposing As Boolean)
        If Not Me.disposedValue Then
            If disposing Then
                Free()
                _bytes = Nothing
            End If
        End If
        Me.disposedValue = True
    End Sub
 
    Public Sub Dispose() Implements IDisposable.Dispose
        Dispose(True)
        GC.SuppressFinalize(Me)
    End Sub
#End Region
 
End Class
Um die Display-Ressourcen einer nicht mehr benötigten Bild-Abfrage
freizugeben, ruft man "Free"; um eine Pic-Instanz völlig aus der
Liste und dem Speicher zu entfernen, ruft man "Dispose."
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Ergänzender Hinweis 
Autor: Bazi
Datum: 02.07.17 22:32

ja, wird leider viel zu oft vergessen.
Danke Dir.

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel