vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

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

Allgemeine Diskussionen
Re: Dialogfenster wird erst beim Beenden sichtbar 
Autor: RalfH
Datum: 16.12.02 10:00

Hallo,

ich hab's herausgefunden.

Vor dem Laden von frmSetup (modal) wird eine Einstellungen-Datei für den exclusiven Schreibmodus reserviert. Schlägt die Reservierung nun fehl, weil bsw. das Setup-Fenster durch einen anderen Admin schon geöffnet ist, wird ein Timer in frmSetup aktiviert. Dieser prüft dann jede Sekunde, ob die Datei wieder zur Verfügung steht und wen dem so ist, ne Meldung ausgibt, die neuen Einstellungen ins Setup-Fenster übernimmt und den Ok-Button enabled.

Das Problem tritt immer dann auf, wenn die Datei-Reservierung im Timer-Event fehltschlägt. Dann bleibt das Fenster solange unsichtbar im "Wartestatus" (trotz SHOW), bis irgendwann die Einstellungen-Datei zum exclusiven Schreiben geöffnet werden kann. In der gesamten Zwischenzeit kann weiterhin im Prog-Fenster gearbeitet werden, wenn auch im totalen Zeitraffer. Fenster-, Maus- bzw. Tastatur-Aktionen werden pro Sekunde (der Intervall meines Timers in frmSetup) nur einmal durchgeführt. Die CPU-Auslastung pendelt dabei während der gesamten Runtime zwischen 2 und 25%.

Wird das Prog während dieser Zeit beendet, entlädt das Prog alle Forms, Objekte, Controls und Klassen fehlerfrei. Die Form frmSetup (obwohl auch ohne Fehlermeldung entladen) verbleibt im Speichern, auch nach dem Befehl END.
Kann die Datei dann irgendwann mal im Schreibmodus geöffnet werden, geht das Setup-Fenster aufeinmal auf. Das Fenster wird dann nach dem Schließen so viele Male wieder geöffnet, wie vorher versucht wurde es zu öffnen. Nachdem alle Versuche abgearbeitet wurden, wird das Prog dann endlich komplett aus dem Speicher entfernt.

Nun weiß ich zwar warum, aber verstehen kann ich das Ganze aber immer trotzdem nicht.
----------------------
Sobald ich den Open-Befehl in u.g. Funktion "WriteOpen" wegnehme und den Rückgabewert auf FALSE setze gibt's das Problem nicht mehr.

Auszug frmSetup:
(alle anderen Function's und Sub's in frmSetup ändern nur Control-Eigenschaften)
[color=green]'tmrCheckAccess ist das Timer-Control
Private Sub tmrCheckAccess_Timer()
 
    [color=green]'Timer erstmal anhalten
    tmrCheckAccess.Enabled = False
 
    [color=green]' prüft, ob exclusiv schreiben möglich ist
         ' wenn ja:
    If SettingFile.WriteOpen Then
 
        [color=green]' Nachricht, das jetzt Schreibzugriff besteht
        Message RESSTR_SETTINGFILE_ENABLE, vbInformation
 
        [color=green]' liest die neue Einstellungsdaten
                   ' bei irgendwelchen Fehlern, bleiben die aktuellen
                   ' Einstellungen erhalten, ansonsten werden die
                   ' neuen Einstellungen jetzt übernohmen
        If SettingFile.ReadData Then
 
            [color=green]' neuen Einstellungen jetzt übernehmen
            Me.SetControlValue
 
        Else
 
            [color=green]' Nachricht, das die aktuelle Einstellungen weiterhin 
            ' bestehen bleiben
            Message RESSTR_SETTINGREAD_IMPOSSIBLE, vbExclamation
        End If
 
        [color=green]' tmrCheckAccess ist nicht mehr notwendig, deswegen wird 
        ' hier abgebrochen
        Exit Sub
 
    End If
 
    [color=green]' wenn nix erreicht wurde, dann wieder weiter mit Timer
    tmrCheckAccess.Enabled = True
End Sub
Auszug MODUL SettingFile
Public Number As Integer    [color=green]' Dateinummer, wenn die Datei geöffnet 
' ist
                                                                 ' -1 wenn, 
                                                                 ' Schreibzugri
                                                                 ' ff nicht 
                                                                 ' möglich 
                                                                 ' ist
Public Name As String       [color=green]' Datei mit den globalen Einstellungen
 
' öffnen die Datei im Schreibmodus
Public Function WriteOpen() As Boolean
 
    [color=green]' Errorhandler abschalten
    On Error Resume Next
 
    [color=green]' freie Dateinummer ermitteln
    Number = FreeFile
 
    [color=green]' Datei einfach mit Zugriffsmodus "exclusiv Schreiben" _
      öffnen[/color]
    Open Name For Binary Access Read Write Lock Write As Number
 
    [color=green]' wenns fehltschlägt
    If Err.Number <> 0 Then
 
        [color=green]' die Dateinummer zurücksetzen...
        Number = -1
 
        [color=green]' ...und FALSE zurückgeben
        WriteOpen = False
    Else
 
        [color=green]' TRUE zurückgeben, wenn Datei geöffnet wurde
        WriteOpen = True
    End If
 
End Function

Viel Spass,
R@lf

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Dialogfenster wird erst beim Beenden sichtbar486RalfH13.12.02 12:10
Re: Dialogfenster wird erst beim Beenden sichtbar319ModeratorDieter13.12.02 12:28
Re: Dialogfenster wird erst beim Beenden sichtbar292RalfH13.12.02 13:43
Re: Dialogfenster wird erst beim Beenden sichtbar289ModeratorDieter13.12.02 13:46
Re: Dialogfenster wird erst beim Beenden sichtbar295RalfH13.12.02 17:10
Re: Dialogfenster wird erst beim Beenden sichtbar314ModeratorDieter13.12.02 19:30
Re: Dialogfenster wird erst beim Beenden sichtbar285RalfH16.12.02 10:00

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-2025 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